我有兴趣从问题中提取三元组(主语,谓语,宾语).
例如,我想转换以下问题:
谁是美国总统的妻子?
至 :
(x,isWifeOf,y)∧(y,isPresidentof,USA)
x和y是我们必须找到的unknows才能回答问题(/ \表示连接).
我已经阅读了很多关于这个主题的论文,我想使用现有的解析器(如Stanford解析器)来执行此任务.我知道解析器输出2种类型的数据:
一些论文试图从解析结构树中构建三元组(例如,从句子中提取三重提取),但是这种方法似乎太弱而无法处理复杂的问题.
另一方面,依赖树包含许多相关信息以执行三次提取.很多论文声称这样做,但是我没有找到任何明确给出详细程序或算法的论文.大多数时候,作者说他们根据他们没有给出的一些规则来分析产生三元组的依赖关系.
有没有人知道任何有关从问题的依赖树中提取(主题,谓词,对象)的更多信息的论文?
rdf nlp stanford-nlp nlp-question-answering dependency-parsing
如何从SyntaxNet(https://github.com/tensorflow/models/tree/master/syntaxnet)获得依赖解析(不是语法树)输出?我看到了依赖解析的描述......如何训练模型的描述,而不是如何获得依赖解析输出.
SyntaxNet(特别是Parsey McParseface模型)甚至是开箱即用的依赖解析吗?
我有句子约翰在商店看到一个华丽的帽子
如何将其表示为依赖树,如下所示?
(S
(NP (NNP John))
(VP
(VBD saw)
(NP (DT a) (JJ flashy) (NN hat))
(PP (IN at) (NP (DT the) (NN store)))))
Run Code Online (Sandbox Code Playgroud)
我从这里得到了这个脚本
import spacy
from nltk import Tree
en_nlp = spacy.load('en')
doc = en_nlp("John saw a flashy hat at the store")
def to_nltk_tree(node):
if node.n_lefts + node.n_rights > 0:
return Tree(node.orth_, [to_nltk_tree(child) for child in node.children])
else:
return node.orth_
[to_nltk_tree(sent.root).pretty_print() for sent in doc.sents]
Run Code Online (Sandbox Code Playgroud)
我得到以下,但我正在寻找树(NLTK)格式.
saw
____|_______________
| | at
| | |
| …Run Code Online (Sandbox Code Playgroud) 该POS标签和标签Depedency通过输出Parsey McParseface给出在tag-set和label-set文件在这里分别.
该Syntaxnet自述概述了该模型的宾州树库,OntoNotes和英文Web树库训练.
是否有类似于Universal Dependency项目给出的相应POS标签和依赖标签的详细描述?
我想使用spacy的POS标记,NER和依赖项解析,而不使用单词标记化。确实,我的输入是表示一个句子的标记列表,并且我想尊重用户的标记化。使用spacy或任何其他NLP软件包,这是否完全可能?
现在,我正在使用基于spacy的函数以Conll格式放置一个句子(一个unicode字符串):
import spacy
nlp = spacy.load('en')
def toConll(string_doc, nlp):
doc = nlp(string_doc)
block = []
for i, word in enumerate(doc):
if word.head == word:
head_idx = 0
else:
head_idx = word.head.i - doc[0].i + 1
head_idx = str(head_idx)
line = [str(i+1), str(word), word.lemma_, word.tag_,
word.ent_type_, head_idx, word.dep_]
block.append(line)
return block
conll_format = toConll(u"Donald Trump is the new president of the United States of America")
Output:
[['1', 'Donald', u'donald', u'NNP', u'PERSON', '2', u'compound'],
['2', 'Trump', u'trump', u'NNP', u'PERSON', '3', u'nsubj'], …Run Code Online (Sandbox Code Playgroud) 使用 Spacy,我根据我定义的语法规则从文本中提取方面-意见对。规则基于 POS 标签和依赖标签,由token.pos_和 获取token.dep_。下面是语法规则之一的示例。如果我通过Japan is cool,它返回的句子[('Japan', 'cool', 0.3182)],其中的值代表cool.
但是我不知道如何让它识别命名实体。例如,如果我通过了Air France is cool,我想得到[('Air France', 'cool', 0.3182)]但我目前得到的是[('France', 'cool', 0.3182)].
我查看了 Spacy 在线文档,我知道如何提取 NE( doc.ents)。但我想知道可能的解决方法是使我的提取器工作。请注意,我不希望强制措施,如连接字符串AirFrance,Air_France等等。
谢谢!
import spacy
nlp = spacy.load("en_core_web_lg-2.2.5")
review_body = "Air France is cool."
doc=nlp(review_body)
rule3_pairs = []
for token in doc:
children = token.children
A = "999999"
M = "999999"
add_neg_pfx = False
for child in children …Run Code Online (Sandbox Code Playgroud) python nlp named-entity-recognition spacy dependency-parsing
我使用python3和nltk与stanford依赖解析器来解析句子列表.然后用句子收集所有节点信息.以下是我的代码,它在python3和一个名为.python的virtualenv环境中执行:
from nltk.parse.stanford import StanfordDependencyParser
parser = StanfordDependencyParser('stanford-parser-full-2015-12-09/stanford-parser.jar', 'stanford-parser-full-2015-12-09/stanford-parser-3.6.0-models.jar');
graph_nodes = sum([[dep_graph.nodes for dep_graph in dep_graphs] for dep_graphs in parser.raw_parse_sents(sentences)], []);
Run Code Online (Sandbox Code Playgroud)
我发现stanford依赖解析器不断在某些句子中抛出断言错误.这是我得到的错误:
graph_nodes = sum([[dep_graph.nodes for dep_graph in dep_graphs] for dep_graphs in self.parser.raw_parse_sents(sentences)], []);
File "/Users/user/sent_code/.python/lib/python3.5/site-packages/nltk/parse/stanford.py", line 150, in raw_parse_sents
return self._parse_trees_output(self._execute(cmd, '\n'.join(sentences), verbose))
File "/Users/user/sent_code/.python/lib/python3.5/site-packages/nltk/parse/stanford.py", line 91, in _parse_trees_output
res.append(iter([self._make_tree('\n'.join(cur_lines))]))
File "/Users/user/sent_code/.python/lib/python3.5/site-packages/nltk/parse/stanford.py", line 339, in _make_tree
return DependencyGraph(result, top_relation_label='root')
File "/Users/user/sent_code/.python/lib/python3.5/site-packages/nltk/parse/dependencygraph.py", line 84, in __init__
top_relation_label=top_relation_label,
File "/Users/user/sent_code/.python/lib/python3.5/site-packages/nltk/parse/dependencygraph.py", line 328, in _parse
assert cell_number == len(cells)
AssertionError
Run Code Online (Sandbox Code Playgroud)
然后我发现导致这个错误的句子.它是 : …
我有以下代码:
import spacy
from spacy import displacy
from pathlib import Path
nlp = spacy.load('en_core_web_sm', parse=True, tag=True, entity=True)
sentence_nlp = nlp("John go home to your family")
svg = displacy.render(sentence_nlp, style="dep", jupyter=True)
output_path = Path("/images/dependency_plot.svg")
output_path.open("w", encoding="utf-8").write(svg)
Run Code Online (Sandbox Code Playgroud)
我正在尝试将渲染文件写入图像文件夹中的 svg 文件。但是,我收到错误:
回溯(最近一次调用最后一次):
文件 "",第 8 行,在 output_path.open("w", encoding="utf-8").write(svg)
文件“C:\Users****\AppData\Local\Continuum\miniconda3\lib\pathlib.py”,第 1183 行,在 open opener=self._opener 中)
文件“C:\Users****\AppData\Local\Continuum\miniconda3\lib\pathlib.py”,第 1037 行,在 _opener 中返回 self._accessor.open(self, flags, mode)
文件“C:\Users****\AppData\Local\Continuum\miniconda3\lib\pathlib.py”,第 387 行,包装返回 strfunc(str(pathobj), *args) FileNotFoundError: [Errno 2] 没有这样的文件或目录:'\images\dependency_plot.svg'
该目录确实存在,所以我不确定我做错了什么。我还查看了 spacy 使用页面https://spacy.io/usage/visualizers#jupyter并无法弄清楚我做错了什么。我正在使用 spyder(如果需要此信息)。请协助。
运行CoreNLP时经常会在stderr中看到这个:
Cannot find node in dependency for word said
Run Code Online (Sandbox Code Playgroud)
对于将引号连接到扬声器的动词来说,这似乎发生了,这对于我的应用程序,引用提取/表征非常重要.
(编辑)这个警告在实践中意味着什么?这是一个已知问题,是否有修复?
我需要使用Stanford CoreNLP进行浅层解析和深度解析.我google了很多但没有成功.最后,我发现有2个解析器,Constituency解析器和Dependency解析器.
我的问题是:
选区解析器浅层解析和依赖解析器是深度解析吗?
任何人都可以把上述解析器的代码和任何有用的链接?
是否有一种优雅的方法来获取句子中单词/标记的索引?我知道令牌的属性https://spacy.io/api/token#attributes “ i”属性返回整个父文档中的索引。但是父文档可以包含多个句子。
示例:“这是一个例子。这是另一个例子。”
我需要的都是将“ This”作为索引0返回,将“ is”都作为索引1返回等等。
提前致谢 :)
我有一个用例,我想使用 spacy 或 nltk 或任何 NLP 库提取句子的主要有意义的部分。
例句1: “我如何提高反对骚扰的声音” 意图是: “提高反对骚扰的声音”
例句2: “唐老鸭是由哪个漫画家/哪个男人/谁创作的?” 意图是: “唐老鸭是由”创造的
例句3: “如何使用spacy或nltk检索句子的主要意图”? 意图: “使用 spacy nltk 检索句子的主要意图”
我是依赖解析的新手,并不完全知道如何做到这一点。请帮我。
我正在探索 spacy nlp python 库。我有这个:
text='Daniel is a smart clever professor.'
spacy_doc = nlp(text)
token_pos=[token.pos_ for token in spacy_doc]
token_tag=[token.tag_ for token in spacy_doc]
token_dep=[token.dep_ for token in spacy_doc]
token_pos
Out[105]: ['PROPN', 'VERB', 'DET', 'ADJ', 'ADJ', 'NOUN', 'PUNCT']
token_tag
Out[106]: ['NNP', 'VBZ', 'DT', 'JJ', 'JJ', 'NN', '.']
token_dep
Out[107]: ['nsubj', 'ROOT', 'det', 'amod', 'amod', 'attr', 'punct']
spacy.explain('attr')
Out[108]: 'attribute'
def to_nltk_tree(node):
if node.n_lefts + node.n_rights > 0:
return Tree(node.orth_, [to_nltk_tree(child) for child in node.children])
else:
return node.orth_
[to_nltk_tree(sent.root).pretty_print() for sent …Run Code Online (Sandbox Code Playgroud) nlp ×7
spacy ×7
stanford-nlp ×4
python ×3
java ×2
nltk ×2
pos-tagger ×2
syntaxnet ×2
parsing ×1
python-2.7 ×1
python-3.x ×1
rdf ×1
syntax ×1
tokenize ×1