21

我正在做一个项目,我需要分析一页文本和一组文本来确定主导词。我想知道是否有一个库(首选 c# 或 java)可以为我处理繁重的工作。如果没有,是否有一种或多种算法可以实现我的以下目标。

我想做的类似于从您在网络上找到的 url 或 rss 提要构建的词云,除了我不想要可视化。它们一直用于分析总统候选人的演讲,以了解主题或最常用的词是什么。

复杂之处在于我需要对数千个短文档执行此操作,然后是这些文档的集合或类别。

我最初的计划是解析文档,然后过滤常用词 - of、the、he、she 等。然后计算剩余词在文本中出现的次数(以及整个集合/类别)。

问题是将来我想处理词干、复数形式等。我也想看看有没有办法识别重要的短语。(而不是一个单词的计数,一个短语的计数是2-3个单词一起)

任何有关策略、库或算法的指导都将受到赞赏。

4

7 回答 7

17

您正在做的一个选择是词频到逆文档频率,或 tf-idf。在此计算下,最强项将具有最高权重。检查是否在这里:http ://en.wikipedia.org/wiki/Tf-idf

另一种选择是使用诸如朴素贝叶斯分类器之类的东西,使用单词作为特征,并找出文本中最强的特征来确定文档的类别。这将与最大熵分类器类似地工作。

就执行此操作的工具而言,最好的工具是 NLTK,这是​​一个包含大量文档和教程的 Python 库:http: //nltk.sourceforge.net/

对于 Java,请尝试 OpenNLP: http ://opennlp.sourceforge.net/

对于短语 stuff,考虑我提供的第二个选项,即使用二元组和三元组作为特征,甚至作为 tf-idf 中的术语。

祝你好运!

于 2008-10-20T22:53:26.693 回答
5

添加到罗伯特埃尔韦尔的答案:

  • 词干和折叠词形式。英语中一个简单的方法是在小写单词形式上 使用Porter Stemming 。
  • “常用词”的一个术语是“停止词”或“停止列表”
  • 按照建议通读 NLTK 书将很好地解释许多这些介绍性问题。
  • 您必须解决的一些问题是解析句子(这样您的二元组和 n-gram 短语不会跨越句子边界),将句子拆分为标记,以及决定如何处理所有格形式。

这些东西都不是明确的,也没有任何“正确答案”。另请参阅“nlp”和“自然语言”SO 标签。

祝你好运!这是一个不平凡的项目。

于 2008-10-20T23:21:44.157 回答
1

好的。所以你有一个包含文本的文档和一个文档集合(语料库)。有很多方法可以做到这一点。

我建议使用 Lucene 引擎 (Java) 来索引您的文档。Lucene 支持一种数据结构(索引),它在其中维护许多文档。文档本身是一个数据结构,可以包含“字段”——比如作者、标题、文本等。您可以选择哪些字段被索引,哪些字段不被索引。

将文档添加到索引是微不足道的。Lucene 也是为速度而构建的,并且可以很好地扩展。

接下来,您想弄清楚术语和频率。由于 lucene 在索引过程中已经为您计算了这个,您可以使用 docFreq 函数并构建您自己的词频函数,或者使用 IndexReader 类的 getTermFreqVectors 函数来获取词条(及其频率)。

现在由您决定如何对其进行排序以及您要使用什么标准来过滤您想要的单词。要找出关系,您可以使用 wordnet 开源库的 Java API。要词干,请使用 Lucene 的 PorterStemFilter 类。短语重要性部分比较棘手,但是一旦您走到了这一步 - 您可以搜索有关如何将 n-gram 搜索集成到 Lucene 中的提示(提示)

祝你好运!

于 2009-06-05T00:35:14.423 回答
1

您可以使用 Windows 平台 SDK 附带的 Windows 索引服务。或者,只需阅读以下介绍以了解 NLP 的概述。

http://msdn.microsoft.com/en-us/library/ms693179(VS.85).aspx http://i.msdn.microsoft.com/ms693179.wbr-index-create(en-us,VS. 85).gif

http://i.msdn.microsoft.com/ms693179.wbr-query-process(en-us,VS.85).gif

于 2008-10-21T00:54:09.087 回答
0

我还想看看是否有办法识别重要的短语。(而不是一个单词的计数,一个短语的计数是2-3个单词一起)

这部分问题称为搭配提取。(至少如果您将“重要短语”视为出现频率明显高于偶然出现的短语。)我在另一个关于该特定子问题的SO 问题上给出了答案。

于 2009-10-29T18:20:30.420 回答
0

检查 MapReduce 模型以获取字数,然后按照 tf-idf 中所述导出频率

Hadoop 是一个 apache MapReduce 框架,可用于对许多文档进行字数统计的繁重任务。 http://hadoop.apache.org/common/docs/current/mapred_tutorial.html

您无法获得一个可以解决您想要的所有问题的单一框架。你必须选择正确的概念和框架组合才能得到你想要的。

于 2009-09-22T04:00:41.360 回答
0

您正在寻找的似乎是词袋文档聚类/分类。您将通过此搜索找到指导。

于 2011-04-10T12:51:09.940 回答