java - 常见 nlp 任务的效率

标签 java python nlp

我正在尝试制作一个大量使用词性标记的应用程序。但是 nltk 的 pos 标记功能对我来说似乎不符合标准 - 例如:

import nltk
text = "Obama delivers his first speech."

sent  =  nltk.sent_tokenize(text)


loftags = []
for s in sent:
    d = nltk.word_tokenize(s)   

    print nltk.pos_tag(d)

结果:

akshayy@ubuntu:~/summ$ python nn1.py [('奥巴马', 'NNP'), ('交付', 'NNS'), ('他的', 'PRP$'), ('第一', 'JJ'), ('演讲', 'NN' ), ('.', '.')]

与斯坦福 NLP 相比,这并不好。现在,当我在Python环境上投入了足够的时间和精力时,转向java对我来说似乎并不实际。另外,与 java 相比,我更倾向于 C,因此 Python 也更适合将来的使用。因此第一个问题是: 1) 你真的认为 Java 更适合拥有大量可用工具的 nlp 任务吗?我做了很好的研究,发现 java 有更大的社区致力于 nlp 任务。

2)相反,有没有什么好的方法可以让我创建自己的句子解析器,然后创建 pos 标记器,以便能够灵活地修改将来使用的任何语言。

最佳答案

您绝对应该使用基于 Java 的 POS 标记器之一。我用Stanford Core NLP标记器,但还有其他标记器。 NLTK 主要是一个教学工具包,不适合工业强度使用。基于 Java 的标记器也会快得多。

但是,使用 Java 工具包并不妨碍您使用 Python 进行工作。在 Python 中编写一个包装类非常简单,它只需运行 Java 命令并解析结果以供您在 Python 代码中使用。

关于java - 常见 nlp 任务的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15819673/

相关文章:

java - 使用 JAXB 处理 <property key ='name' value ='Foo'/> 而不是 <name>Foo</name>

java - JUnit Jupiter (JUnit5) 中的参数化测试执行

java - RESTEasy 和方括号中的 MultivaluedMap

python - session 在浏览器关闭时过期未正确设置 django

python - 与 nltk 分块

java - 限制300字的正则表达式

python - 命名元组实例的酸洗正常成功,但在模块被 Cythonized 时失败

python - 如何使用Python解决风险平价分配

elasticsearch - Elasticsearch中的快速关键词提取

python - 无法标记数据框中的多个列