Java 从文本中提取语义/风格特征

Java 从文本中提取语义/风格特征,java,python,machine-learning,Java,Python,Machine Learning,我想知道一些开源工具(用于java/python),它们可以帮助我从文本中提取语义和风格特征。语义特征的示例包括形容词-名词比率、特定的词性标记序列(形容词后接名词:adj | nn)等。文体特征的示例包括独特单词的数量、代词的数量等。目前,我只知道其中一个示例将文本块转换为基本向量空间模型 我知道很少有像、、和这样的文本挖掘包。然而,我找不到任何适合我的任务的机制 关于,--Denzil我使用的分析器和索引机制为文档构建向量空间,然后在这个空间中导航。您可以为文档构造术语频率向量,使用现有文档

我想知道一些开源工具(用于java/python),它们可以帮助我从文本中提取语义和风格特征。语义特征的示例包括形容词-名词比率、特定的词性标记序列(形容词后接名词:adj | nn)等。文体特征的示例包括独特单词的数量、代词的数量等。目前,我只知道其中一个示例将文本块转换为基本向量空间模型

我知道很少有像、、和这样的文本挖掘包。然而,我找不到任何适合我的任务的机制

关于,
--Denzil

我使用的分析器和索引机制为文档构建向量空间,然后在这个空间中导航。您可以为文档构造术语频率向量,使用现有文档在向量空间中搜索其他文档。如果您的数据很大(数百万个文档,数万个功能),那么您可能会喜欢Lucene。你也可以做词干分析,词性标注和其他的事情。这可能是词性标注的一个很好的起点。简而言之,Lucene为您提供了所有必要的机制来实现您提到的任务


我经常听到的一个图书馆是。它再次建立在Lucene的基础上,但我没有直接的经验。除此之外,我建议看看维基百科的向量空间模型

我在一些NLP(自然语言处理)任务中使用了NLTK,它工作得非常好(尽管有点慢)。你到底为什么想要文本的这种结构化表示?(真正的问题是,根据应用程序的不同,有时更简单的表示可能更好)

如果您的文本主要是自然语言(英语),您可以尝试使用词性标记(POS)来提取短语。Monty tagger是一个纯粹的python位置标记器。
我从C++ POS标签,比如CRFTagger,得到了非常满意的性能。我使用
subprocess.Popen
将它绑定到Python。POS标签允许您只保留句子的重要部分:例如,名词和动词,然后可以使用Lucene或Xapian(我最喜欢的)等任何索引工具对其进行索引.

我认为斯坦福解析器是免费提供的最好和全面的NLP工具之一:它不仅允许您解析结构依赖项(计算名词/形容词),而且还将为您提供句子中的语法依赖项(这样您就可以提取主语、宾语等). 后一个组件是Python库还不能完成的(请参阅),并且可能是软件处理语义能力方面最重要的特性

如果您对Java和Python工具感兴趣,那么Jython可能是您使用的最有趣的工具。我也在同一条船上,所以我写了这篇关于使用Jython来运行Stanford解析器中提供的示例代码的文章——我会看一下,看看您的想法:


编辑:在阅读了您的一条评论后,我了解到您需要解析2900万个句子。我认为,通过使用纯Java结合两种真正强大的技术:斯坦福解析器+Hadoop,您将受益匪浅。两者都是纯用Java编写的,都有一个非常丰富的API,您可以使用它在一组机器上用很短的时间解析大量数据。如果没有这些机器,可以使用Amazon的EC2集群。如果您需要一个使用Stanford Parser+Hadoop的示例,请给我留言,我将用示例的URL更新帖子。

以下是Java NLP工具的最新汇编:


LingPipe()在回答中还没有提到,它是一个优秀的、积极开发的工具包。

我迟迟没有提到的优秀库之一:

Amac,感谢您的回复!“向量空间模型”虽然是一个非常稳健的模型,但它是一个原始模型,更依赖于统计数据。我想实现一个更复杂的模型,使用文本等概念的语义知识。这篇博文可以帮助我使用Lucene提取POS模式序列,但NLTK(当然使用正则表达式)等更轻的软件包可以帮助我执行相同的任务。谢谢你给我指出语义向量包。虽然它对我的任务没有直接帮助,但我会考虑使用它来完成其他任务。Gabe,谢谢你的回应!我有一个.txt文件中的句子列表(精确地说是2900万个句子)。每个句子都有一些主题的注解。每个句子可以有多个注释。我有一个来自文本文件的独特单词列表和独特注释列表。我需要创建一个word(唯一术语)-注释矩阵(类似于术语文档矩阵)。然而,考虑到独特单词的数量约为1500万,注释的数量为318k,我对如何继续进行感到茫然。数据结构的大小让我很反感。这是相当大的:-D对于初学者来说,你可能不想一次读取整个文件,几秒钟之内:你确定你需要在内存中一次性读取整个数据结构来完成你想做的事情吗?根据您试图做的事情,将数据存储在数据库(键值类型DBs(couchdb等)或RDB(mysql)中的简单表)中可能不是不可能的.Gabe,我可以将这些功能保存在RDBMS等中。不过主要的一点是提取它们!Ken,谢谢!问题是对于文本分类任务,我没有找到一种编程语言可以提取功能。多年来,我们看到了这么多标准功能被用作我上面提到的功能,但我是对于研究人员没有发布相同的代码感到惊讶和失望。Jon,LingPipe只提供了尽可能多的帮助。我已经广泛使用了LingPipe,但我想要的可能是