从文本中检测短语和关键字的算法

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,可能有很大帮助,因为在自然语言中,句子结尾和句子开始倾向于从消息空间的有限子集中提取并因此产生可能的令牌组合.似乎在统计上表现得很好,但通常与语义无关.

更好的方法(可能更昂贵,处理方面,以及设计/投资方面)将使用与输入文本的域和/或国家语言相关的额外"先验".

  • POS(词性)标记在几个方面非常有用(提供额外的,更客观的表达边界,以及"噪音"词类,例如所有文章,即使在实体的上下文中使用通常也很少在标签云中,OP想要生产.
  • 字典,词典等也非常有用.特别是,这些标识"实体"(也称为WordNet术语中的实例)及其替代形式.实体对于标签云非常重要(虽然它们不是在它们中找到的唯一一类词),并且通过识别它们,也可以对它们进行标准化(可以使用许多不同的表达式,"参议员T.肯尼迪")因此消除了重复,但也增加了基础实体的频率.
  • 如果语料库被构造为文档集合,则使用与TF(术语频率)和IDF(反向文档频率)相关的各种技巧可能是有用的.

[对不起,现在就去吧(加上想从你的具体目标中获得更多细节等).我会尝试提供更多细节和指出]

[顺便说一下,我想在这篇文章中插入Jonathan Feinberg和Dervin Thunk的回复,因为它们为手头的任务提供了方法和工具方面的优秀指针.特别是,NTLKPython- on -large提供了一个很好的实验框架]


Jon*_*erg 11

我将从O'Reilly的书" 美丽的数据"中的Peter Norvig开始.他在他的个人网站上提供了您需要的ngram数据,以及漂亮的Python代码(可以解决您的问题,或者进行一些修改).


Dar*_*con 8

听起来你正在寻找搭配提取.Manning和Schütze在这个主题上专门写了一,解释和评估了我链接到的维基百科文章中提到的"提议公式".

我无法将整个章节纳入这一回应; 希望他们的一些链接会有所帮助.(NSP听起来特别适合.)nltk也有一个搭配模块,Manning和Schütze 没有提到它,因为他们的书早于它.

到目前为止发布的其他答复涉及统计语言处理和更一般的n-gram; 搭配是一个特定的子主题.