我想知道Java中是否有可以进行文本分析的API。可以提取文本中的所有单词、单独的单词、表达式等的东西。可以通知找到的单词是数字、日期、年份、名称、货币等的东西。
我现在正在开始文本分析,所以我只需要一个API就可以启动了。我做了一个网络爬虫,现在我需要一些东西来分析下载的数据。需要方法来计算页面中的单词数量,相似的单词,数据类型和其他与文本相关的资源。
Java中有用于文本分析的API吗?
编辑:文本挖掘,我想要挖掘文本。Java的API提供了这一点。
发布于 2011-07-23 21:26:58
例如,您可以使用标准库java.text中的一些类,或者使用StreamTokenizer (您可以根据自己的需求对其进行自定义)。但正如你所知道的-来自互联网的文本数据通常有很多拼写错误,,为了更好的性能,你必须使用像,模糊标记器,- java.text和其他标准工具,在这样的上下文中功能太有限了。
因此,我建议您使用正则表达式 (java.util.regex),并根据需要创建自己的记号赋予器。
P.S.根据您的需要-您可以创建状态机解析器来识别原始文本中的模板化部分。您可能会在下图中看到简单的状态机识别器(您可以构造更高级的解析器,它可以识别文本中更复杂的模板)。

发布于 2011-07-26 06:07:47
看起来你在找一个Named Entity Recogniser。
你有几个选择。
来自斯坦福自然语言处理小组的CRFClassifier是命名实体识别器的Java实现。
GATE (General Architecture for Text Engineering),一个用于语言处理的开源套件。看看开发人员页面上的屏幕截图:http://gate.ac.uk/family/developer.html。它应该会让你对它能做什么有个大概的了解。video tutorial可以让您更好地了解该软件所提供的功能。
您可能需要自定义其中一个以满足您的需求。
您还可以选择其他选项:
通过网络服务进行简单的文本提取:例如,从文本中提取词性(例如,动词、名词)的Yahoo's Term Extractor.
在CRFClassifier培训方面,您可以找到一个brief explanation at their FAQ
...the training数据应位于制表符分隔的列中,您可以通过映射定义这些列的含义。其中一列应该称为"answer“,并且具有NER类,并且现有的特性知道诸如"word”和"tag“之类的名称。您可以通过属性文件定义数据文件、地图和要生成的要素。关于不同属性在NERFeatureFactory的Javadoc中生成的特性,有相当多的文档,尽管最终您必须转到源代码来回答一些问题……
您还可以在javadoc of CRFClassifier上找到代码片段
典型的命令行用法
对于在文本文件上使用提供的序列化分类器运行训练的模型:
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-24 00:11:11
如果您正在处理大量数据,也许Apache的Lucene将帮助您满足您的需求。
否则,最简单的方法可能就是创建您自己的Analyzer类,它严重依赖于标准模式类。这样,你就可以控制什么文本被认为是单词、边界、数字、日期等。例如,20110723是日期还是数字?您可能需要实现多遍解析算法来更好地“理解”数据。
https://stackoverflow.com/questions/6800509
复制相似问题