25

我想知道是否有 API 可以在 Java 中进行文本分析。可以提取文本中的所有单词、单独的单词、表达式等的东西。可以告知找到的单词是否是数字、日期、年份、名称、货币等的东西。

我现在开始文本分析,所以我只需要一个 API 即可启动。我做了一个网络爬虫,现在我需要一些东西来分析下载的数据。需要方法来计算页面中的单词数、相似单词、数据类型和与文本相关的其他资源。

Java中有用于文本分析的API吗?

编辑:文本挖掘,我想挖掘文本。提供此功能的 Java API。

4

5 回答 5

26

看起来您正在寻找命名实体识别器

你有几个选择。

斯坦福自然语言处理组的CRFClassifier是命名实体识别器的 Java 实现。

GATE(文本工程通用架构),一个用于语言处理的开源套件。看看开发人员页面上的屏幕截图:http: //gate.ac.uk/family/developer.html。它应该让您简要了解这可以做什么。视频教程让您更好地了解该软件所提供的功能。

您可能需要自定义其中之一以满足您的需求。

您还有其他选择:


关于 CRFClassifier 的培训,您可以在他们的 FAQ 中找到简要说明

...训练数据应该在制表符分隔的列中,您可以通过地图定义这些列的含义。一列应称为“答案”并具有 NER 类,并且现有功能知道诸如“单词”和“标签”之类的名称。您可以通过属性文件定义数据文件、地图以及要生成的特征。在 NERFeatureFactory 的 Javadoc 中,有大量关于不同属性生成哪些特性的文档,但最终您必须转到源代码来回答一些问题......

您还可以在CRFClassifier 的 javadoc 中找到代码片段:

典型的命令行用法

对于在文本文件上使用提供的序列化分类器运行经过训练的模型:

java -mx500m edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier conll.ner.gz -textFile samplesentences.txt

在属性文件(训练、测试或运行时)中指定所有参数时:

java -mx1g edu.stanford.nlp.ie.crf.CRFClassifier -prop propFile

从命令行训练和测试一个简单的 NER 模型:

java -mx1000m edu.stanford.nlp.ie.crf.CRFClassifier -trainFile trainFile -testFile testFile -macro > output

于 2011-07-25T22:07:46.710 回答
10

例如 - 您可能会使用标准库中的一些类java.text,或者使用StreamTokenizer(您可能会根据您的要求对其进行自定义)。但如您所知 -来自 Internet 来源的文本数据通常有许多拼写错误,为了获得更好的性能,您必须使用模糊标记器之类的东西- java.text 和其他标准实用程序在这种情况下的功能太有限了

因此,我建议您使用正则表达式(java.util.regex) 并根据您的需要创建自己的标记器。

PS 根据您的需要 - 您可以创建状态机解析器来识别原始文本中的模板化部分。您可能会在下图中看到简单的状态机识别器(您可以构建更高级的解析器,它可以识别文本中更复杂的模板)。

在此处输入图像描述

于 2011-07-23T13:26:58.343 回答
8

如果您正在处理大量数据,也许 Apache 的Lucene将帮助您满足您的需求。

否则,创建您自己的严重依赖于标准 Pattern 类的 Analyzer 类可能是最简单的。这样,您可以控制将哪些文本视为单词、边界、数字、日期等。例如,20110723 是日期还是数字?您可能需要实现多遍解析算法以更好地“理解”数据。

于 2011-07-23T16:11:11.003 回答
2

我也推荐看看LingPipe。如果你对 webservices 没问题,那么这篇文章很好地总结了不同的 API

于 2011-07-27T18:19:47.737 回答
2

我宁愿改编 Lucene 的 Analysis 和 Stemmer 类,也不愿重新发明轮子。他们涵盖了绝大多数案件。另请参阅附加和贡献类。

于 2011-07-31T13:53:12.550 回答