我正在尝试从文本中提取关系。所以,让我们看下面的文字“他去看电影。但是,他们去上学了”
所以,这里的关系是“他和电影”,“他们和学校”。我怎么可能将这些编码为标签。我最初的想法是将所有代词标记为 1,将名词标记为 2。但是,有没有更好的方法来做到这一点?
我正在尝试从文本中提取关系。所以,让我们看下面的文字“他去看电影。但是,他们去上学了”
所以,这里的关系是“他和电影”,“他们和学校”。我怎么可能将这些编码为标签。我最初的想法是将所有代词标记为 1,将名词标记为 2。但是,有没有更好的方法来做到这一点?
我会建议使用 spaCy 之类的东西来解析句子,这将能够为你建立这样的关系。
然后就是提取关系并决定如何标记它们的问题。让我们看一个小例子。想象一下你的大文本块包含许多句子。我们首先解析大块,然后可以(可选地)提取我们关心的句子:
import spacy
nlp = spacy.load('en_core_web_sm') # this defines our 'parser' for English
doc = nlp(big_block_of_text) # you may want to clean the text beforehand
假设我们只想要包含单词 'went' 的句子:
sents = [sent for sent in doc.sents if 'went' in sent.string]
这是一个语法走下解析树的示例。我说语义是因为我们使用语法词性来有条件地导航(使用例如名词):
for sent in sents: # loop over each sentence
for word in sent: # analyse each word
if word.pos_ == 'NOUN': # if it is a noun
for child in word.children: # find children (go down the tree)
if child.pos_ == 'NOUN': # select only nouns from the children
print(word, child)
我相信这个片段会提取您给定示例中的对,因此希望输出确实是:
"He movie"
"they school"
您可以使用许多其他词性来更具体或匹配其他用例 - 查看相关的 spaCy 文档。
如何对目标词之间的关系进行实际编码将取决于它们的最终目的,即您最终想要对编码做什么。你现在有了名词对。如果您想保留它们实际来自何处(来自哪些句子)的知识,您确实可以建立一个层次结构,为原始句子保留一个代码,然后为每对单词保留一个代码。