【问题标题】:Extracting semantic/stylistic features from text从文本中提取语义/风格特征
【发布时间】:2011-03-07 18:57:30
【问题描述】:

我想知道可以帮助我从文本中提取语义和风格特征的开源工具(用于 java/python)。语义特征的例子是形容词-名词比率、特定的词性标签序列(形容词后跟名词:adj|nn)等。风格特征的例子是唯一词的数量、代词的数量等。目前,我只知道Word to Web Tools 将文本块转换为基本的向量空间模型。

我知道像 GATENLTKRapid Miner Mallet MinorThird 这样的文本挖掘包很少。但是,我找不到任何适合我的任务的机制。

问候,
--丹齐尔

【问题讨论】:

    标签: java python machine-learning


    【解决方案1】:

    我认为 Stanford Parser 是最好的和最全面的免费 NLP 工具之一:它不仅可以让您解析 结构依赖(计算名词/形容词),而且还可以还给你句子中的语法依赖(这样你就可以提取主语、宾语等)。后一个组件是 Python 库根本无法做到的(请参阅Does NLTK have a tool for dependency parsing?),并且可能会成为您的软件处理语义能力方面最重要的功能。

    如果您对 Java 和 Python 工具感兴趣,那么 Jython 对您来说可能是最有趣的。我也是在同一条船上,所以我写了这篇关于使用 Jython 运行 Stanford Parser 中提供的示例代码的帖子——我想看看你的想法:http://blog.gnucom.cc/2010/using-the-stanford-parser-with-jython/

    编辑:在阅读了您的一个 cmets 后,我了解到您需要解析 2900 万个句子。我认为使用纯 Java 结合两种非常强大的技术可以让您受益匪浅:Stanford Parser + Hadoop。两者都是纯粹用 Java 编写的,并且具有极其丰富的 API,您可以使用它在很短的时间内在机器集群上解析大量数据。如果您没有机器,您可以使用 Amazon 的 EC2 集群。如果您需要使用 Stanford Parser + Hadoop 的示例,请给我留言,我将使用我的示例的 URL 更新帖子。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 肯,谢谢!但问题是对于文本分类任务,我找不到一种可以提取特征的编程语言。多年来,我们已经看到有很多标准功能被用作我上面提到的那些,但我对研究人员没有发布相同的代码感到惊讶和失望。
      【解决方案3】:

      我使用Lucene 的分析器和索引机制为文档构建向量空间,然后在该空间中导航。您可以为文档构建词频向量,使用现有文档在向量空间中搜索其他 similar 文档。如果您的数据很大(数百万个文档,数万个特征),那么您可能会喜欢 Lucene。您还可以进行词干提取、pos 标记和其他操作。这个blog post 可能是 POS 标记的一个很好的起点。简而言之,Lucene 为您提供了实现您提到的任务的所有必要机制。

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

      【讨论】:

      • Amac,感谢您的回复! “向量空间模型”虽然是一个非常健壮的模型,但它是一个原始模型,并且更多地依赖于统计数据。我想使用来自诸如概念等文本的语义知识来实现​​一个更复杂的模型。博客文章可以帮助我使用 Lucene 提取一系列 POS 模式,但是更轻量级的包,如 NLTK(当然使用正则表达式)可以帮助我执行相同的任务。感谢您将我指向语义向量包。虽然它不能直接帮助我完成任务,但我会考虑将它用于其他一些任务。
      【解决方案4】:

      我将 NLTK 用于一些 NLP(自然语言处理)任务,它工作得非常好(虽然有点慢)。为什么您想要文本的这种结构化表示? (真正的问题,取决于应用程序,有时更简单的表示会更好)

      【讨论】:

      • 加布,感谢您的回复!我有一个 .txt 文件中的句子列表(准确地说是 2900 万个句子)。每个句子都带有一些主题的注释。每个句子可以有多个注释。我也有来自文本文件的唯一单词列表和唯一注释列表。我需要创建一个单词(唯一术语)注释矩阵(类似于术语文档矩阵)。但是,考虑到唯一词的数量约为 1500 万,注释的数量为 318k,我对如何进行处理感到困惑。数据结构的大小让我望而却步。
      • 嗯,相当大 :-D 对于初学者来说,你可能不想一次读取整个文件,几秒钟:你确定你需要一次在内存中的整个数据结构做你想做的事?根据您要执行的操作,可能不会考虑将数据存储在数据库中(键值类型数据库(couchdb 等)或 RDB 中的简单表(mysql )。
      • Gabe,我可以将这些特征保存在 RDBMS 等中。但重点是提取它们!
      【解决方案5】:

      以下是最新的 Java NLP 工具汇编: http://www.searchenginecaffe.com/2007/03/java-open-source-text-mining-and.html

      LingPipe (http://alias-i.com/lingpipe/) 尚未在答案中提及,它是一款出色且积极开发的工具包。

      【讨论】:

      • Jon,LingPipe 只能提供帮助。我已经广泛使用了 LingPipe,但我所要求的可能不是由包括 LingPipe 在内的任何工具提供的。
      【解决方案6】:

      我推迟了一个出色的库:http://code.google.com/p/textmatrix/

      【讨论】:

        猜你喜欢
        • 2012-06-20
        • 2019-04-09
        • 2016-09-12
        • 2021-08-09
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        • 2019-04-28
        • 2015-05-21
        相关资源
        最近更新 更多