用于为单词词形还原和类似任务创建自己的规则的工具

时间:2012-03-10 02:19:25

标签: java regex nlp stemming lemmatization

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

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

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

那就是我需要能够使用右侧左侧拍摄的图案。

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

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

您只需将文件中的规则加载到String中并注册它们等等。

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