一尘不染

用于自然语言处理的词频算法

algorithm

在没有获得信息检索学位的情况下,我想知道是否存在用于计算单词在给定文本正文中出现频率的算法。目的是让人们对一组文本评论所说的内容具有“一般感觉”。沿着Wordle的路线

我想要的是:

  • 忽略文章,代词等(“ a”,“ an”,“ the”,“ him”,“ them”等)
  • 保留专有名词
  • 忽略连字号,软类型除外

伸手摘星,这些将是桃红色的:

  • 处理词干和复数(例如,喜欢,喜欢,喜欢,喜欢匹配相同的结果)
  • 形容词(副词等)及其主题的分组(“优质服务”,而不是“优质”,“服务”)

我已经尝试使用Wordnet进行一些基本的操作,但是我只是盲目地进行调整,并希望它适用于我的特定数据。更通用的东西会很棒。


阅读 222

收藏
2020-07-28

共1个答案

一尘不染

按照以下内容,您不需要一个,但需要几个不错的算法。

  • 忽略代词是通过非连续列表完成的。
  • 保留专有名词?您是说要检测诸如 胡佛 水坝之 类的命名实体并说“这是一个单词”或诸如 编程 语言之 类的复合名词?我会给您一个提示:这很困难,但是两者都有库。寻找NER(命名实体识别)和词汇分块。OpenNLP是同时执行这两种操作的Java工具包。
  • 忽略连字符?你的意思是,就像在换行符吗?使用正则表达式,并通过字典查找来验证生成的单词。
  • 处理复数/词干:您可以查看Snowball提取器。它的技巧很好。
  • 形容词和名词的“组合”通常是浅层解析的任务。但是,如果您正在寻找定性形容词(好的,坏的,卑鄙的,令人惊讶的…),您可能会对情感分析感兴趣。LingPipe可以做到这一点,还有更多。

对不起,我知道您说过要加入KISS,但不幸的是,您的要求很难满足。但是,存在用于所有这些功能的工具,如果您不想这样做,则应该能够将它们捆绑在一起,而不必自己执行任何任务。如果您想自己执行任务,建议您研究一下词干,这是最简单的方法。

如果您使用Java,请将LuceneOpenNLP工具箱结合使用。由于Lucene已经内置了词干提取器和大量教程,因此您将获得非常好的结果。另一方面,OpenNLP工具包的文档资料很少,但是您不需要太多。您可能也对用Python编写的NLTK感兴趣。

我会说您放弃了最后一个要求,因为它涉及浅层解析,并且绝对不会改善您的结果。

啊,顺便说一句。您要查找的文档术语-频率-事物的确切术语称为tf-idf。这几乎是查找术语的文档频率的最佳方法。为了正确地做到这一点,您将无法使用多维矢量矩阵。

… 是的我知道。在参加IR研讨会之后,我对Google的敬意更高。不过,在IR中做了一些事情之后,我对它们的敬意就下降了。

2020-07-28