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

所以我正在寻找一些 通用工具 允许定义 变换规则 对于此类情况。规则可能看起来像这样:

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

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

我与根本不懂编程的语言学家一起工作,所以 理想地 这个工具应该使用 外部文件简单的规则语言.

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

有几个非常酷的 NLP 项目,包括 , 斯坦福核心自然语言处理, NLTK 和其他人,我并不是所有这些方面的专家,所以我可能会错过我需要的工具。如果是这样,请告诉我。

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

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

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

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

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

有帮助吗?

解决方案

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

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top