我正在开展一个项目,我需要分析一个文本页面和文本页面集合以确定主导词汇.我想知道是否有一个库(更喜欢c#或java)来处理繁重的工作.如果没有,是否有一个算法或多个可以实现我的目标.
我想要做的是类似于你在网上找到的url或rss feed构建的单词云,除了我不想要可视化.他们一直用于分析总统候选人的演讲,看看主题或最常用词是什么.
复杂的是,我需要在成千上万的短文档,然后是这些文档的集合或类别上执行此操作.
我最初的计划是解析文档,然后过滤常用词 - ,他,她等等.然后计算剩余词出现在文本中的次数(以及整个集合/类别).
问题是,在将来,我想处理词干,复数形式等.我还想看看是否有办法识别重要的短语.(而不是一个单词的计数,短语的计数一起是2-3个单词)
有关策略,库或算法的任何指导都会有所帮助.
您正在做的一个选项是反向文档频率的术语频率,或tf-idf.在此计算中,最强的术语将具有最高权重.检查是否在这里:http://en.wikipedia.org/wiki/Tf-idf
另一种选择是使用类似于朴素贝叶斯分类器的东西,使用单词作为特征,并找到文本中最强大的特征来确定文档的类.这将与最大熵分类器类似地起作用.
至于要做到这一点的工具,最好的工具就是NLTK,这是一个包含大量文档和教程的Python库:http://nltk.sourceforge.net/
对于Java,请尝试OpenNLP:http://opennlp.sourceforge.net/
对于短语的东西,考虑我提供的第二个选项,使用bigrams和trigrams作为功能,甚至作为tf-idf中的术语.
祝好运!
添加到Robert Elwell的答案中:
阻止和折叠单词形式.英语中的一种简单方法是在较低的词形上使用Porter Stemming.
"常用词"的术语是"停用词"或"停止列表"
阅读建议书中的NLTK书将很好地解释很多这些介绍性问题.
你必须解决的一些问题是解析句子(这样你的双字母和n-gram短语不会越过句子边界),将句子分成标记,以及决定如何处理占有形式.
这些东西都不是明确的,也没有任何"正确答案".另请参阅"nlp"和"自然语言"SO标记.
祝好运!这是一个非平凡的项目.