Kim*_*ais 43 algorithm text-processing nlp
我有大约100兆字节的文本,没有任何标记,分为大约10,000个条目.我想自动生成一个'标签'列表.问题是有些词组(即短语)只有在组合在一起时才有意义.
如果我只计算单词,我会得到大量非常常见的单词(是,for,for,in,am等).我已经计算了它之前和之后的其他单词的数量和数量,但现在我真的无法弄清楚下一步该做什么有关2和3个单词短语的信息存在,但我该如何提取这些数据呢?
mjv*_*mjv 34
在此之前,尝试保留输入文本中的"边界"信息.
(如果这些信息不容易丢失,你的问题暗示可能已经完成
了标记化)在标记化(单词解析,在这种情况下)过程中,寻找可以定义表达边界的模式(例如标点符号,特别是句点) ,并且还多个LF/CR分离,使用这些.另外词语,如"该",通常可以使用作为边界.这样的表达边界通常为"负",在某种意义上它们分开两个令牌的实例,其是肯定不是包含在同一个表达式中.一些正边界是引号,特别是双引号.这种类型的信息可能有助于过滤掉一些n-gram(参见下一段).还有一些单词序列,例如"例如"或"代替"或"需要"也可以用作表达边界(但是使用这样的信息就是使用"先验",我将在后面讨论).
在不使用外部数据(输入文本除外)的情况下,通过运行文本的digrams和trigrams(2和3个连续单词的序列)的统计数据,您可以获得相对成功.然后[大多数]具有显着(*)个实例的序列可能是您正在寻找的"表达/短语"的类型.
这种稍微粗糙的方法会产生一些误报,但总的来说可能是可行的.已经过滤了第一段中暗示的已知跨越"边界"的n-gram,可能有很大帮助,因为在自然语言中,句子结尾和句子开始倾向于从消息空间的有限子集中提取并因此产生可能的令牌组合.似乎在统计上表现得很好,但通常与语义无关.
更好的方法(可能更昂贵,处理方面,以及设计/投资方面)将使用与输入文本的域和/或国家语言相关的额外"先验".
[对不起,现在就去吧(加上想从你的具体目标中获得更多细节等).我会尝试提供更多细节和指出]
[顺便说一下,我想在这篇文章中插入Jonathan Feinberg和Dervin Thunk的回复,因为它们为手头的任务提供了方法和工具方面的优秀指针.特别是,NTLK和Python- on -large提供了一个很好的实验框架]
Jon*_*erg 11
我将从O'Reilly的书" 美丽的数据"中的Peter Norvig开始.他在他的个人网站上提供了您需要的ngram数据,以及漂亮的Python代码(可以解决您的问题,或者进行一些修改).