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

Mar*_*ald 33 algorithm nlp word-frequency

如果没有获得信息检索的学位,我想知道是否存在任何用于计算单词在给定文本体中出现的频率的算法.目标是让人们对一组文本评论所说的内容有"普遍的感觉".沿着Wordle的路线.

我想要的是什么:

  • 忽略文章,代词等('a','an','the','他','他们'等)
  • 保留专有名词
  • 忽略连字符,除了软类

到达星星,这些将是桃子:

  • 处理词干和复数(例如喜欢,喜欢,喜欢,喜欢匹配相同的结果)
  • 将形容词(副词等)与其主题分组("伟大的服务"而不是"伟大的","服务")

我尝试过一些使用Wordnet的基本内容,但我只是盲目地调整内容并希望它适用于我的特定数据.更通用的东西会很棒.

Ale*_*rov 70

你不需要一个,但几个不错的算法,沿着下面的方向.

  • 忽略代词是通过一个停止列表完成的.
  • 保留专有名词?你的意思是,检测命名实体,如胡佛 水坝,并说"它是一个字"或复合名词,如编程 语言?我会给你一个提示:那个很难,但是两者都有库.寻找NER(命名的权利识别)和词汇分块.OpenNLP是一个兼具两者的Java-Toolkit.
  • 忽略连字符?你的意思是,就像在线下休息一样?使用正则表达式并通过字典查找验证生成的单词.
  • 处理复数/词干:你可以看看雪球词干.它做得很好.
  • 用他们的名词"分组"形容词通常是浅层解析的任务.但如果你正在寻找定性形容词(好的,坏的,蹩脚的,令人惊奇的......),你可能会对情绪分析感兴趣.LingPipe做到了这一点,还有更多.

对不起,我知道你说你想要吻,但不幸的是,你的要求并不容易.然而,存在所有这些的工具,你应该能够将它们绑在一起而不必自己执行任何任务,如果你不想这样做的话.如果你想自己完成一项任务,我建议你看一下干预,这是最简单的.

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

我会说你放弃了你的最后一个要求,因为它涉及浅层解析,并且肯定不会影响你的结果.

啊,顺便问一下.你正在寻找的那个文件 - 术语 - 频率 - 事物的确切术语称为tf-idf.这几乎是查找术语文档频率的最佳方式.为了做到这一点,你不会使用多维矢量矩阵.

... 是的我知道.在参加IR研讨会后,我对Google的尊重更大.在IR中做了一些事情之后,我对他们的尊重也同样快.


und*_*ied 16

欢迎来到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    .
Run Code Online (Sandbox Code Playgroud)

如您所见,它将"算法"识别为"算法"的复数形式(NNS),将"存在"识别为"存在"的共轭(VBZ).它还将"a"和"the"标识为"确定者(DT)" - 文章的另一个词.如您所见,POS标记器还标记了标点符号.

要做除列表中最后一点之外的所有操作,您只需要通过POS标记器运行文本,过滤掉您不感兴趣的类别(确定者,代词等)并计算基本形式的频率.这些话.

以下是一些流行的POS标记:

TreeTagger(仅限二进制文件:Linux,Solaris,OS-X)
GENIA Tagger(C++:编译你的自己)
Stanford POS Tagger(Java)

要在列表中做最后一件事,您需要的不仅仅是字级信息.一个简单的方法开始是通过计算序列 ,而不仅仅是文字本身.这些被称为n-gram.一个好的起点是UNIX for Poets.如果你愿意投资一本关于NLP的书,我会推荐统计自然语言处理基础.