从文本中提取语义/风格特征
我想了解一些开源工具(适用于Java或Python),可以帮助我从文本中提取语义和风格特征。语义特征的例子包括形容词和名词的比例,特定的词性标签顺序(比如形容词后面跟名词:adj|nn)等等。风格特征的例子则包括独特单词的数量、代词的数量等等。目前,我只知道有一个叫Word to Web Tools的工具,它可以把一段文本转换成基本的向量空间模型。
我知道一些文本挖掘的工具包,比如GATE、NLTK、Rapid Miner、Mallet和MinorThird。不过,我没有找到适合我需求的工具。
祝好,
--Denzil
6 个回答
我使用Lucene的分析工具和索引机制来为文档构建向量空间,然后在这个空间中进行导航。你可以为文档构建词频向量,利用已有的文档来搜索向量空间中其他相似的文档。如果你的数据量很大(比如几百万个文档,几万种特征),那么Lucene会很适合你。你还可以进行词干提取、词性标注等其他操作。这个博客文章可能是学习词性标注的一个不错起点。总之,Lucene为你提供了实现你提到的任务所需的所有机制。
我经常听到的一个库是Semantic Vectors。它同样是基于Lucene构建的,但我没有直接使用过。除此之外,我建议你看看维基百科的向量空间模型文章。
如果你的文本主要是自然语言(比如英语),你可以尝试用一种叫做词性标注器(POS tagger)的工具来提取短语。Monty tagger就是一个纯Python写的词性标注器。我用过一个C++写的词性标注器,效果非常好,比如CRFTagger,链接在这里:http://sourceforge.net/projects/crftagger/。我通过subprocess.Popen
把它和Python连接起来。词性标注可以帮助你只保留句子中重要的部分,比如名词和动词,然后你可以用像Lucene或Xapian这样的索引工具来对这些重要部分进行索引(我最喜欢的是Xapian)。
我觉得斯坦福解析器是一个非常棒的自然语言处理工具,而且是免费的。它不仅能帮你分析句子的结构依赖(比如数一数名词和形容词),还可以告诉你句子里的语法依赖(这样你就能提取出主语、宾语等等)。后者是目前Python库还做不到的功能(可以看看这个链接:NLTK有没有依赖解析的工具?),而且这可能是你软件在处理语义方面最重要的功能。
如果你对Java和Python工具感兴趣,那么Jython可能是你最喜欢的选择。我之前也有过类似的经历,所以我写了这篇关于如何用Jython运行斯坦福解析器示例代码的文章。你可以看看,看看你觉得怎么样:http://blog.gnucom.cc/2010/using-the-stanford-parser-with-jython/
编辑:在看了你的一个评论后,我了解到你需要解析2900万句子。我觉得你可以通过使用纯Java来结合两个非常强大的技术:斯坦福解析器和Hadoop,这样会大有裨益。这两者都是用Java写的,API非常丰富,可以在一群机器上快速处理大量数据。如果你没有这些机器,可以使用亚马逊的EC2集群。如果你需要斯坦福解析器和Hadoop结合使用的示例,给我留言,我会更新帖子,提供我的示例链接。