我正在做很多自然语言处理,有点不寻常的要求。通常我得到的任务类似于词形还原 - 给定一个单词(或只是一段文字)我需要找到一些模式并以某种方式转换单词。例如,我可能需要纠正错误拼写,例如给出“eatin”这个词,我需要把它变成“吃”。或者我可能需要将单词“ahahaha”,“ahahahaha”等转换为“ahaha”等等。
所以我正在寻找一些通用工具,允许为这种情况定义转换规则。规则可能如下所示:
{w}in -> {w}ing
aha(ha)+ -> ahaha
那就是我需要能够使用右侧左侧拍摄的图案。
我与完全不懂编程的语言专家合作,所以理想这个工具应该使用外部文件和简单的规则语言
我在Clojure中正在做这个项目,所以理想这个工具应该是一个JVM语言库(Java,Scala,Clojure),但是其他语言或命令行工具也可以。
有几个非常酷的NLP项目,包括GATE,Stanford CoreNLP,NLTK和其他项目,我不是所有这些项目的专家,所以我可能会错过这个工具需要那里。如果是的话,请告诉我。
请注意,我正在使用多种语言并执行非常不同的任务,因此具体语言的具体词形变形器,词干分析器,拼写错误校正器等不符合我的需要 - 我真的需要更通用的工具。
UPD。似乎我需要提供一些我需要的更多细节/示例。
基本上,我需要一个用某种正则表达式替换文本的函数(类似于Java的String.replaceAll()
),但有可能在替换字符串中使用捕获的文本。例如,在现实世界的文本中,人们经常重复字符以强调特定的单词,例如,有人可能会写“这部电影太棒了......”。我需要能够用单个字符替换这些重复的“oooo”。所以可能有这样的规则(语法类似于我之前在本文中使用的那样):
{chars1}<char>+{chars2}? -> {chars1}<char>{chars2}
也就是说,用一些字符(chars1
)替换单词,至少3个字符,可能以其他字符(chars2
)结尾,但字符串相似,但只有一个字符。这里的关键点是我们抓住规则的左侧并在右侧使用它。
答案 0 :(得分:2)
我不是NLP的专家,但我相信Snowball可能会引起您的兴趣。它是一种代表词干算法的语言。它的词干分析器用于Lucene搜索引擎。
答案 1 :(得分:1)
我发现http://userguide.icu-project.org/transforms/general对于像这样的一般模式/转换任务也很有用,忽略了关于音译的内容,它很适合做很多事情。
您只需将文件中的规则加载到String中并注册它们等等。