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工具包,它可以同时完成这两项功能
- 忽略断字?你是说,比如在换行的时候?使用正则表达式并通过字典查找验证生成的单词
- 处理复数/词干:您可以查看。它做得很好
- 将形容词与其名词“分组”通常是一项任务。但是如果你特别寻找定性形容词(好的,坏的,下流的,惊人的…),你可能会感兴趣。这样做,还有更多
。。。是的,我知道。在参加了一个关于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 ...