Algorithm 自然语言处理中的词频算法

Algorithm 自然语言处理中的词频算法,algorithm,nlp,word-frequency,Algorithm,Nlp,Word Frequency,在没有获得信息检索学位的情况下,我想知道是否存在计算给定文本中单词出现频率的算法。目标是通过一组文本评论,对人们所说的话有一种“总体感觉”。沿着……的路线 我想要的是: 忽略冠词、代词等(“a”、“an”、“the”、“him”、“them”等) 保留专有名词 忽略连字符,软类型除外 伸手去够星星,这些将是桃色的: 处理词干和复数(例如,like、likes、liked、liking匹配相同的结果) 形容词(副词等)及其主语的分组(“伟大的服务”与“伟大”、“服务”相对) 我尝试了一些使

在没有获得信息检索学位的情况下,我想知道是否存在计算给定文本中单词出现频率的算法。目标是通过一组文本评论,对人们所说的话有一种“总体感觉”。沿着……的路线

我想要的是:

  • 忽略冠词、代词等(“a”、“an”、“the”、“him”、“them”等)
  • 保留专有名词
  • 忽略连字符,软类型除外
伸手去够星星,这些将是桃色的:

  • 处理词干和复数(例如,like、likes、liked、liking匹配相同的结果)
  • 形容词(副词等)及其主语的分组(“伟大的服务”与“伟大”、“服务”相对)

我尝试了一些使用Wordnet的基本功能,但我只是盲目地调整,希望它能对我的特定数据起作用。更通用的东西会更好。

您刚才描述的算法。一个程序,用一个大按钮说“做它”。。。我不知道


但让我有建设性地说。我向你推荐这本书。第三章和第四章包含了非常实用的例子(实际上,没有复杂的理论,只有例子)。

我前一段时间写了一个完整的程序来做这件事。我可以在回家后上传一个演示


下面是代码(asp.net/c#):h

您需要的不是一个,而是几个好的算法,如下所示

  • 忽略代词是通过
  • 保留专有名词?你是说,检测命名实体,比如胡佛大坝,说“这是一个单词”或者复合名词,比如编程语言?我给你一个提示:这是一个困难的问题,但两者都有库。寻找NER(命名实体识别)和词块。是一个Java工具包,它可以同时完成这两项功能
  • 忽略断字?你是说,比如在换行的时候?使用正则表达式并通过字典查找验证生成的单词
  • 处理复数/词干:您可以查看。它做得很好
  • 将形容词与其名词“分组”通常是一项任务。但是如果你特别寻找定性形容词(好的,坏的,下流的,惊人的…),你可能会感兴趣。这样做,还有更多
对不起,我知道你说你想接吻,但不幸的是,你的要求不是那么容易满足。尽管如此,仍然存在用于所有这些的工具,如果您不想,您应该能够将它们绑定在一起,而不必自己执行任何任务。如果你想自己完成一项任务,我建议你看看词干,这是最简单的

如果使用Java,请与工具箱结合使用。你会得到非常好的结果,因为Lucene已经有了一个内置的词干分析器和很多教程。另一方面,OpenNLP工具包的文档记录很差,但您不需要太多。您可能还对用Python编写的

我想说的是,您放弃了最后一个需求,因为它涉及到浅层解析,并且肯定不会改善您的结果

啊,顺便说一句。你要找的文档术语频率的确切术语叫做。这几乎是查找术语文档频率的最佳方法。为了正确地执行此操作,您将无法使用多维向量矩阵


。。。是的,我知道。在参加了一个关于IR的研讨会之后,我对谷歌的尊重更大了。在IR中做了一些事情之后,我对他们的尊敬也很快下降了。

你问题的第一部分听起来没那么糟糕。基本上,您需要做的就是从文件(或流w/e)中读取每个单词,并将其放入前缀树中。每次遇到已经存在的单词时,您都会增加与该单词相关的值。当然,你也会有一个忽略列表,列出你想从计算中漏掉的所有东西

如果使用前缀树,则要确保查找任何单词都要转到O(N),其中N是数据集中单词的最大长度。在这种情况下,前缀树的优点是,如果您想要查找复数和词干,您可以检查O(M+1),如果这对单词是可能的,其中M是没有词干或复数的单词的长度(是单词吗?呵呵)。一旦你建立了你的前缀树,我会重新分析它的词干之类的,然后把它浓缩下来,这样词根就是结果所在

在搜索时,您可以有一些简单的规则,以便在根或茎或其他情况下使匹配返回正值

第二部分似乎极具挑战性。我天真的倾向是对形容词主语分组持有不同的结果。使用与上述相同的原则,但只需将其分开即可

语义分析的另一个选择是将每个句子建模为主语、动词等关系树(句子有主语和动词,主语有名词和形容词等)。一旦你用这种方式把所有的文本都分解了,你就可以很容易地浏览并快速计算出发生的不同的匹配


只是一些闲聊,我相信有更好的想法,但我喜欢思考这些东西。

欢迎来到NLP的世界^_^

你所需要的只是一点基础知识和一些工具

已经有一些工具可以告诉你句子中的单词是名词、形容词还是动词。他们被称为。通常,他们将纯文本英语作为输入,并输出单词、基本形式和词性。以下是您文章第一句中流行的UNIX词性标记器的输出:

$ echo "Without getting a degree in information retrieval, I'd like to know if there exists any algorithms for counting the frequency that words occur in a given body of text." | tree-tagger-english 
# Word  POS     surface form
Without IN  without
getting VVG get
a   DT  a
degree  NN  degree
in  IN  in
information NN  information
retrieval   NN  retrieval
,   ,   ,
I   PP  I
'd  MD  will
like    VV  like
to  TO  to
know    VV  know
if  IN  if
there   EX  there
exists  VVZ exist
any DT  any
algorithms  NNS algorithm
for IN  for
counting    VVG count
the DT  the
frequency   NN  frequency
that    IN/that that
words   NNS word
occur   VVP occur
in  IN  in
a   DT  a
given   VVN give
body    NN  body
of  IN  of
text    NN  text
.   SENT    .
如您所见,它将“算法”标识为“算法”的复数形式(NNS),“存在”标识为“存在”的共轭形式(VBZ)。它还将“a”和“the”标识为“限定词(DT)”--文章的另一个词。如您所见,POS
>>> import urllib2, string
>>> devilsdict = urllib2.urlopen('http://www.gutenberg.org/files/972/972.txt').read()
>>> workinglist = devilsdict.split()
>>> cleanlist = [item.strip(string.punctuation) for item in workinglist]
>>> results = {}
>>> skip = {'a':'', 'the':'', 'an':''}
>>> for item in cleanlist:
      if item not in skip:
        try:
          results[item] += 1
        except KeyError:
          results[item] = 1

>>> results
{'': 17, 'writings': 3, 'foul': 1, 'Sugar': 1, 'four': 8, 'Does': 1, "friend's": 1, 'hanging': 4, 'Until': 1, 'marching': 2 ...