java从文本中提取语义/风格特征
我想知道有哪些开源工具(用于java/python)可以帮助我提取语义&;文本的文体特征。语义特征的例子包括形容词-名词比率、特定的词性标记序列(形容词后接名词:adj | nn)等。文体特征的例子包括独特单词的数量、代词的数量等。目前,我只知道Word to Web Tools 将文本块转换为基本向量空间模型
我知道像GATE、NLTK、Rapid Miner、 Mallet 和 MinorThird 这样的文本挖掘包很少。然而,我找不到任何适合我的任务的机制
问候,
--丹齐尔
# 1 楼答案
我使用Lucene的分析器和索引机制为文档构建向量空间,然后在这个空间中导航。您可以为文档构造术语频率向量,使用现有文档在向量空间中搜索其他similar文档。如果你的数据很大(数百万个文档,数万个功能),那么你可能会喜欢Lucene。你还可以做词干分析、词性标注和其他工作。这个blog post可能是词性标注的一个良好起点。简而言之,Lucene为您提供了实现您提到的任务所需的所有机制
我经常听到的一个图书馆是Semantic Vectors。它再次建立在Lucene的基础上,但我没有直接的经验。除此之外,我建议看看维基百科的向量空间模型article
# 2 楼答案
我认为斯坦福解析器是免费提供的最好、最全面的NLP工具之一:它不仅可以让你解析结构依赖关系(计算名词/形容词),还可以给你句子中的语法依赖关系(这样你就可以提取主语、宾语等)。后一个组件是Python库还不能完成的(请参见Does NLTK have a tool for dependency parsing?),它可能是软件处理语义能力方面最重要的功能
如果您对Java和Python工具感兴趣,那么Jython可能是最有趣的工具。我也在同一条船上,所以我写了这篇关于使用Jython来运行斯坦福解析器中提供的示例代码的帖子——我会看一眼,看看你是怎么想的:http://blog.gnucom.cc/2010/using-the-stanford-parser-with-jython/
编辑:读了你的一条评论后,我知道你需要解析2900万个句子。我认为,通过使用纯Java结合两种真正强大的技术:斯坦福解析器+Hadoop,您可能会受益匪浅。两者都是纯用Java编写的,都有一个极其丰富的API,可以在一个计算机集群上用很短的时间解析大量数据。如果你没有这些机器,你可以使用亚马逊的EC2集群。如果你需要一个使用Stanford Parser+Hadoop的例子,请给我留言,我会用我的例子的URL更新帖子
# 3 楼答案
我在一些NLP(自然语言处理)任务中使用了NLTK,它运行得非常好(尽管有点慢)。你到底为什么想要文本的这种结构化表示?(真正的问题是,根据应用程序的不同,有时更简单的表示可能更好)
# 4 楼答案
我遇到的一个杰出的图书馆:http://code.google.com/p/textmatrix/
# 5 楼答案
如果你的文本主要是自然语言(英语),你可以尝试使用词性标记来提取短语。Monty tagger是一个纯粹的python位置标记器。 我从C++ POS标签中得到了非常满意的性能,比如CRFTGGER ^ {A1}。我使用
subprocess.Popen
将其与Python绑定。POS标签允许你只保留句子的重要部分:例如,名词和动词,然后可以使用任何索引工具,如Lucene或Xapian(我最喜欢的)对它们进行索引# 6 楼答案
下面是Java NLP工具的汇编,这些工具相当先进: http://www.searchenginecaffe.com/2007/03/java-open-source-text-mining-and.html
LingPipe(http://alias-i.com/lingpipe/)尚未在答案中提及,是一个优秀的&;积极开发工具包