从文本中检测短语和关键词的算法
nlp
5
0

我有大约100 MB的文本,没有任何标记,分为大约10,000个条目。我想自动生成一个“标签”列表。问题是有些单词组(即短语)只有在将它们组合在一起时才有意义。

如果我只计算单词,我会得到很多真正常见的单词(例如,the,for,in,am等)。我已经计算了单词和单词之前和之后的单词数量,但是现在我真的无法弄清楚下一步该怎么做。存在与2个单词和3个单词短语相关的信息,但是我该如何提取这些数据?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

听起来您正在寻找搭配提取曼宁(Manning)和舒兹(Schütze)在该主题上专门做了一 ,解释和评估了我链接的Wikipedia文章中提到的“提议的公式”。

我无法将整章都放在这个回应中。希望他们的某些链接会有所帮助。 ( NSP听起来特别合适。)nltk也有一个搭配模块 ,Manning和Schütze并未提及,因为他们的书早于它。

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

收藏
评论

我将从彼得·诺维格Peter Norvig )在O'Reilly的《 美丽的数据》一书中精彩的一章开始。他在他的个人网站上提供了您需要的ngram数据以及漂亮的Python代码(可以按原样或通过一些修改解决您的问题)。

收藏
评论

首先,请尝试保留输入文本中有关“边界”的信息。
(如果此类信息尚未丢失,那么您的问题意味着可能已经很容易地完成了令牌化)
在标记化(在这种情况下为单词解析)过程中,寻找可以定义表达式边界的模式 (例如标点符号,尤其是句点,以及多个LF / CR分隔符),也可以使用这些字符。这样的表达式边界通常是“负”的,从某种意义上说,它们将两个令牌实例分开,这些实例肯定不会包含在同一个表达式中。一些正边界是引号,尤其是双引号。可以过滤掉某些n-gram(请参阅下一段)。也可以将诸如“例如”或“代替”或“需要”之类的单词序列用作表达边界(但使用info正在使用“ prior”(稍后再讨论)。

在不使用外部数据 (输入文本除外)的情况下,可以通过对文本的二字形和三字形 (连续2个和3个连续单词)进行统计来获得相对成功。然后,[大多数]具有大量(*)实例的序列将很可能是您要查找的“表达式/短语”的类型。
这种有些粗略的方法会产生一些误报,但总的来说可能是可行的。如第一段所述,过滤已知的跨过“边界”的n-gram可能会有所帮助,因为在自然语言中,句子的结尾和句子的开头往往来自消息空间的有限子集,因此会产生可能在统计上似乎可以很好地表示出来,但是通常在语义上不相关。

更好的方法 (可能更昂贵,可能在处理方面以及在设计/投资方面更为昂贵)将使用与输入文本的域和/或本国语言相关的额外“优先级”。

  • POS(词性)标记在几种方面都非常有用(提供了更多,更客观的表达边界,以及“杂音”词类,例如所有文章,即使在实体上下文中使用时通常很少)在标签云中,以便OP想要产生。
  • 字典,词典等也可能非常有用。特别是,这些标识“实体”(在WordNet语言中也称为实例)及其替代形式。实体对于标签云非常重要(尽管它们不是其中唯一的单词类别),并且通过标识它们,还可以将它们标准化(可以使用许多不同的表达方式来表示“ Senator T”。肯尼迪”),因此消除重复,但也增加了基础实体的频率。
  • 如果将语料库构造为文档集合,则使用与TF(术语频率)和IDF(反向文档频率)相关的各种技巧可能会很有用。

[对不起,现在就走了(再加上您特定目标的更多细节,等等。)我将尝试提供更多详细信息并在以后指出]

[顺便说一句,我想在此插入乔纳森·费恩伯格(Jonathan Feinberg)和德文·唐克(Dervin Thunk)的回复 ,因为他们在处理手头任务的方法和工具方面提供了出色的指导。特别是NTLK和一般的Python提供了一个出色的实验框架]

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号