我正在做一个项目,我需要分析一页文本和一页文本集合来确定主导词。 我想知道是否有一个库(更喜欢 c# 或 java)可以为我处理繁重的工作。 如果没有,是否有一种或多种算法可以实现我下面的目标。
我想做的类似于从您在网络上找到的 url 或 rss 提要构建的词云,只是我不想要可视化。 它们一直用于分析总统候选人演讲,以查看主题或最常用的单词是什么。
复杂的是,我需要对数千个短文档执行此操作,然后是这些文档的集合或类别。
我最初的计划是解析文档,然后过滤常用词 - of,the,he,she等。 然后计算剩余单词在文本(以及整体集合/类别)中出现的次数。
问题是,将来我想处理词干提取、复数形式等。 我还想看看是否有办法识别重要的短语。(不是计算一个单词,而是计算一个短语的2-3个单词)
任何关于策略、库或算法的指导,将不胜感激。
您正在执行的操作的一个选项是术语频率到反向文档频率,或 tf-idf。 在此计算下,最强的项将具有最高的权重。检查是否在这里: http://en.wikipedia.org/wiki/Tf-idf
另一种选择是使用诸如朴素贝叶斯分类器之类的东西,使用单词作为特征,并找到文本中最强的特征以确定文档的类别。 这与最大熵分类器类似。
就工具而言,最好的工具是NLTK,这是一个具有大量文档和教程的Python库:http://nltk.sourceforge.net/
对于Java,请尝试OpenNLP:http://opennlp.sourceforge.net/
对于短语的东西,请考虑我提供的第二个选项,即使用双元组和三元组作为特征,甚至作为 tf-idf 中的术语。
祝你好运!
补充罗伯特·埃尔韦尔的答案:
- 词干和折叠词形。英语中的一种简单方法是在小写单词形式上使用波特词干。 "常用词"的术语是"停用词"
- 或"停用词"
- 按照建议通读NLTK的书将很好地解释许多这些介绍性问题。
- 你必须解决的一些问题是解析句子(这样你的双元语法和n-gram短语就不会跨越句子边界),将句子拆分成标记,以及决定如何处理所有格形式。
这些东西都不是明确的,也没有一个有"正确答案"。 另请参阅"nlp"和"自然语言"SO标签。
祝你好运! 这是一个不平凡的项目。
好吧。因此,您有一个包含文本的文档和文档集合(语料库)。有许多方法可以做到这一点。
我建议使用Lucene引擎(Java)来索引你的文档。Lucene 支持一种数据结构(索引),该结构在其中维护了许多文档。文档本身是一种可以包含"字段"的数据结构 - 例如,作者,标题,文本等。您可以选择哪些字段已编制索引,哪些字段未编制索引。
将文档添加到索引是微不足道的。Lucene也是为速度而生的,并且可以出色地扩展。
接下来,您要弄清楚术语和频率。由于 lucene 在索引过程中已经为您计算了这个问题,因此您可以使用 docFreq 函数并构建自己的术语频率函数,或者使用 IndexReader 类的 getTermFreqVectors 函数来获取项(及其频率)。
现在由您决定如何对其进行排序以及要使用什么条件来过滤所需的单词。要弄清楚关系,您可以使用Java API来建立wordnet开源库。要对单词进行词干,请使用Lucene的PorterStemFilter类。短语重要性部分比较棘手,但是一旦你走到了这一步 - 你可以搜索有关如何将n-gram搜索集成到Lucene(提示)中的提示。
祝你好运!
您可以使用 Windows Platform SDK 附带的 Windows 索引服务。或者,只需阅读以下介绍即可获得 NLP 的概述。
http://msdn.microsoft.com/en-us/library/ms693179(VS.85).aspxhttp://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
检查MapReduce模型以获得字数,然后按照tf-idf中所述推导出频率
Hadoop是一个apache MapReduce框架,可用于许多文档的字数统计繁重任务。http://hadoop.apache.org/common/docs/current/mapred_tutorial.html
你不可能得到一个单一的框架来解决你想要的一切。你必须选择正确的概念和框架组合才能得到你想要的东西。
我还想看看是否有办法识别重要的短语。(不是计算一个单词,而是计算一个短语的2-3个单词)
问题的这一部分称为搭配提取。(至少如果你把"重要短语"看作是出现频率明显高于偶然性的短语。我在另一个关于该特定子问题的 SO 问题中给出了答案。
似乎您正在寻找的称为词袋文档聚类/分类。您将找到有关此搜索的指导。