1

我正在做很多自然语言处理,但要求有点不寻常。我经常得到类似于词形还原的任务——给定一个词(或只是一段文本),我需要找到一些模式并以某种方式转换这个词。例如,我可能需要纠正拼写错误,例如给定单词“eatin”,我需要将其转换为“eating”。或者我可能需要将单词“ahahaha”、“ahahahaha”等转换为“ahaha”等。

所以我正在寻找一些通用工具,允许为这种情况定义转换规则。规则可能如下所示:

 {w}in   ->  {w}ing
 aha(ha)+  ->  ahaha

那就是我需要能够在右侧使用从左侧捕获的模式。

我与完全不懂编程的语言学家一起工作,所以理想情况下,这个工具应该使用外部文件简单的规则语言

我在 Clojure 中做这个项目,所以理想情况下这个工具应该是一个 JVM 语言(Java、Scala、Clojure)的库,但其他语言或命令行工具也可以。

有几个非常酷的 NLP 项目,包括GATEStanford CoreNLPNLTK等,我并不是所有这些项目的专家,所以我可能会错过我需要的工具。如果是这样,请告诉我。

请注意,我正在使用多种语言并执行非常不同的任务,因此具体语言的具体词形还原器、词干分析器、拼写错误校正器等不符合我的需求——我真的需要更通用的工具。

UPD。看来我需要提供一些我需要的更多细节/示例。

基本上,我需要一个用某种正则表达式(类似于 Java 的String.replaceAll())替换文本的函数,但有可能在替换字符串中使用捕获的文本。例如,在现实世界的文本中,人们经常重复字符以强调特定的单词,例如,有人可能会写“This film is sooooo boooring...”。我需要能够仅用单个字符替换这些重复的“oooo”。所以可能会有这样的规则(语法类似于我在本文前面使用的):

{chars1}<char>+{chars2}?  ->  {chars1}<char>{chars2}

也就是说,替换以某些字符 ( chars1) 开头、至少 3 个字符并可能以其他字符 ( chars2) 结尾的单词,但字符串相似,但只有一个 . 这里的关键是我们抓住规则的左侧并在右侧使用它。

4

2 回答 2

2

我不是 NLP 方面的专家,但我相信您可能会对Snowball感兴趣。它是一种表示词干算法的语言。它的词干分析器用于 Lucene 搜索引擎。

于 2012-03-10T02:26:15.197 回答
1

我发现http://userguide.icu-project.org/transforms/general对于像这样的一些一般模式/转换任务也很有用,忽略关于音译的东西,它很适合做很多事情。

您可以将文件中的规则加载到字符串中并注册它们,等等。

http://userguide.icu-project.org/transforms/general/rules

于 2012-03-10T14:31:53.910 回答