注意:我使用Python 2.7作为Anaconda发行版的一部分.我希望这不是nltk 3.1的问题.
我正在尝试使用nltk作为NER
import nltk
from nltk.tag.stanford import StanfordNERTagger
#st = StanfordNERTagger('stanford-ner/all.3class.distsim.crf.ser.gz', 'stanford-ner/stanford-ner.jar')
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
print st.tag(str)
Run Code Online (Sandbox Code Playgroud)
但我明白了
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at edu.stanford.nlp.io.IOUtils.<clinit>(IOUtils.java:41)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1117)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1076)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.classifyAndWriteAnswers(AbstractSequenceClassifier.java:1057)
at edu.stanford.nlp.ie.crf.CRFClassifier.main(CRFClassifier.java:3088)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more
Traceback (most recent call last):
File "X:\jnk.py", line 47, in <module>
print st.tag(str)
File "X:\Anaconda2\lib\site-packages\nltk\tag\stanford.py", line 66, in tag
return sum(self.tag_sents([tokens]), [])
File "X:\Anaconda2\lib\site-packages\nltk\tag\stanford.py", line 89, in tag_sents
stdout=PIPE, …Run Code Online (Sandbox Code Playgroud) 如何关闭Stanford CoreNLP消息(见帖子末尾)?我首先尝试log4j.category.edu.stanford=OFF在log4j.properties中设置,但这没有帮助,所以我发现它显然使用了一个名为"Redwood"的非标准日志框架.根据http://nlp.stanford.edu/nlp/javadoc/javanlp/有文档但它受密码保护.我尝试过, RedwoodConfiguration.empty().apply();但这也无济于事.
记录消息:
Adding annotator tokenize
Adding annotator ssplit
Adding annotator pos
Loading default properties from tagger edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger
Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [1,2 sec].
Run Code Online (Sandbox Code Playgroud)
PS:Redwood.hideAllChannels();也行不通.但是,以下内容会抑制我自己的日志记录语句(但不是来自StanfordCoreNLP的语句):
RedwoodConfiguration.empty().apply();
Redwood.log("test redwood");
Run Code Online (Sandbox Code Playgroud)
解决方案好的,StevenC是对的,毕竟它不是记录语句,但是默认初始化消息被写入stderr,我没想到会看到Stanford拥有它自己的日志框架然后不使用它:-)
无论如何,他的提示让我发现了这个解决方案:
// shut off the annoying intialization messages
RedwoodConfiguration.empty().captureStderr().apply();
nlp = new StanfordCoreNLP(myproperties);
// enable stderr again
RedwoodConfiguration.current().clear().apply();
Run Code Online (Sandbox Code Playgroud) 我有兴趣从问题中提取三元组(主语,谓语,宾语).
例如,我想转换以下问题:
谁是美国总统的妻子?
至 :
(x,isWifeOf,y)∧(y,isPresidentof,USA)
x和y是我们必须找到的unknows才能回答问题(/ \表示连接).
我已经阅读了很多关于这个主题的论文,我想使用现有的解析器(如Stanford解析器)来执行此任务.我知道解析器输出2种类型的数据:
一些论文试图从解析结构树中构建三元组(例如,从句子中提取三重提取),但是这种方法似乎太弱而无法处理复杂的问题.
另一方面,依赖树包含许多相关信息以执行三次提取.很多论文声称这样做,但是我没有找到任何明确给出详细程序或算法的论文.大多数时候,作者说他们根据他们没有给出的一些规则来分析产生三元组的依赖关系.
有没有人知道任何有关从问题的依赖树中提取(主题,谓词,对象)的更多信息的论文?
rdf nlp stanford-nlp nlp-question-answering dependency-parsing
我正在尝试nltk.tag.stanford module 用来标记一个句子(首先像wiki的例子),但我一直收到以下错误:
Traceback (most recent call last):
File "test.py", line 28, in <module>
print st.tag(word_tokenize('What is the airspeed of an unladen swallow ?'))
File "/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py", line 59, in tag
return self.tag_sents([tokens])[0]
File "/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py", line 81, in tag_sents
stdout=PIPE, stderr=PIPE)
File "/usr/local/lib/python2.7/dist-packages/nltk/internals.py", line 160, in java
raise OSError('Java command failed!')
OSError: Java command failed!
Run Code Online (Sandbox Code Playgroud)
或以下LookupError错误:
LookupError:
===========================================================================
NLTK was unable to find the java file!
Use software specific configuration paramaters or set the JAVAHOME environment variable.
=========================================================================== …Run Code Online (Sandbox Code Playgroud) 我很难让 CoreNLP 系统正确找到诗歌语料库中一个句子的结束位置和另一个句子的开始位置。
其陷入困境的原因:
这是一个特别棘手的问题 (系统认为第一句话以第二节开头的“.”结尾)
鉴于缺乏大写字母和标点符号,我想我会尝试使用-tokenizeNLs来看看是否可以改进它,但它太过分了,并切断了空行之间的任何句子(有一些)
这些句子通常以行尾结束,但并非总是如此,所以如果系统可以将行结尾视为句子中断的潜在候选者,并可能权衡这些句子作为端点的可能性,那就很巧妙了,但我不知道如何实现它。
有没有一种优雅的方法来做到这一点?或者替代方案?
提前致谢!
(此处预期输出句子)
我刚开始使用Stanford CoreNLP,我想建立一个定制的NER模型来寻找人.
不幸的是,我没有为意大利人找到一个好的模型.我需要在简历/ CV文档中找到这些实体.
这里的问题是像那些文档可以有不同的结构,例如我可以有:
情况1
- Name: John
- Surname: Travolta
- Last name: Travolta
- Full name: John Travolta
(so many labels that can represent the entity of the person i need to extract)
Run Code Online (Sandbox Code Playgroud)
案例2
My name is John Travolta and I was born ...
Run Code Online (Sandbox Code Playgroud)
基本上,我可以有结构化数据(有不同的标签)或我应该找到这些实体的上下文.
这类文件的最佳方法是什么?在这种情况下,maxent模型可以工作吗?
目前,我采用策略来找到左边有东西的模式,右边有东西,按照这种方法我有80/85%找到实体.
例:
Name: John
Birthdate: 2000-01-01
Run Code Online (Sandbox Code Playgroud)
这意味着我在模式的左边有"Name:",在右边有一个\n(直到它找到\n).我可以创建一个很长的模式列表.我想到了模式,因为我不需要在"其他"上下文中使用名称.
例如,如果用户在工作经历中写入其他名称,则我不需要它们.因为我在寻找个人名字,而不是其他人.使用这种方法,我可以减少误报,因为我将查看特定模式而不是"一般名称".
这种方法的一个问题是我有一个很大的模式列表(1个模式= 1个正则表达式),所以如果我添加其他模式,它就不能很好地扩展.
如果我可以训练一个具有所有这些模式的NER模型,那将是非常棒的,但我应该使用大量文件来训练它.
我正在比较NLTK和Stanford CoreNLP,发现后者有一个为情感分析提供的RNTN(递归张量神经网络)实现.在线提供的示例显示我们不需要训练它,因为它已经使用像Penn TreeBank这样的大型数据集进行了训练
NLTK是否提供类似的功能?我之所以问这个原因是因为我在网上找到的NLTK实现包括培训像Naive-Bayes或MaxEnt这样的特定分类器.
PS:是不是因为Python很容易使用,NLTK更受欢迎?我在Java方面更舒服,所以我应该选择Stanford CoreNLP还是切换到NLTK + python
斯坦福CoreNLP提供了指代消解这里提到,也是这个线程,这提供了有关其在Java实现的一些见解.
但是,我使用的是python和NLTK,我不知道如何在我的python代码中使用CoreNLP的Coreference解析功能.我已经能够在NLTK中设置StanfordParser,这是我的代码到目前为止.
from nltk.parse.stanford import StanfordDependencyParser
stanford_parser_dir = 'stanford-parser/'
eng_model_path = stanford_parser_dir + "stanford-parser-models/edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir + "stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir + "stanford-parser.jar"
Run Code Online (Sandbox Code Playgroud)
如何在python中使用CoreNLP的共参分辨率?
我试着遵循这个.
但是有些我浪费了很多时间而没有任何用处.
我只想GloVe在我自己的语料库(~900Mb corpus.txt文件)上训练模型.我下载了上面链接中提供的文件并使用它编译cygwin(在编辑demo.sh文件并将其更改为VOCAB_FILE=corpus.txt.我应该CORPUS=text8保持不变吗?)输出为:
我怎样才能将这些文件作为GloVe模型加载到python上?
我正在寻找斯坦福NER并考虑使用JAVA Apis来从文本文档中提取邮政地址.该文件可以是任何有邮政地址部分的文件,例如电费单,电费单.
所以我的想法是,
我试图找到一个相同的示例管道(需要详细的步骤是什么),任何人之前都做过这个?建议欢迎.