Nlp 名词和名词组块的散化
我正在尝试创建一个文档语料库,它由柠檬化的名词和名词块组成。我正在使用以下代码:Nlp 名词和名词组块的散化,nlp,spacy,lemmatization,Nlp,Spacy,Lemmatization,我正在尝试创建一个文档语料库,它由柠檬化的名词和名词块组成。我正在使用以下代码: import spacy nlp = spacy.load('en_core_web_sm') def lemmatizer(doc, allowed_postags=['NOUN']): doc = [token.lemma_ for token in doc if token.pos_ in al
import spacy
nlp = spacy.load('en_core_web_sm')
def lemmatizer(doc, allowed_postags=['NOUN']):
doc = [token.lemma_ for token in doc if token.pos_ in allowed_postags]
doc = u' '.join(doc)
return nlp.make_doc(doc)
nlp.add_pipe(nlp.create_pipe('merge_noun_chunks'), after='ner')
nlp.add_pipe(lemmatizer, name='lemm', after='merge_noun_chunks')
doc_list = []
for doc in data:
pr = nlp(doc)
doc_list.append(pr)
“欧元区作为一个货币联盟已经前进了很长的一段路”这句话是在识别了大量的名词后的[“欧元区”,“先进的”,“漫长的”,“道路”,“货币联盟”]
和柠檬化:[“欧元”,“区域”,“道路”,“货币”,“联盟”]
。
有没有一种方法可以将已识别名词块的单词组合起来,得到如下输出:[‘欧元区’、‘路’、‘货币联盟’]
或[‘欧元区’、‘路’、‘货币联盟’]
谢谢你的帮助 我认为你的问题不在于柠檬化。 此方法适用于您的示例
# merge noun phrase and entities
def merge_noun_phrase(doc):
spans = list(doc.ents) + list(doc.noun_chunks)
spans = spacy.util.filter_spans(spans)
with doc.retokenize() as retokenizer:
for span in spans:
retokenizer.merge(span)
return doc
sentence = "the euro area has advanced a long way as a monetary union"
doc = nlp(sentence)
doc2 = merge_noun_phrase(doc)
for token in doc2:
print(token)
#['the euro area', 'way', 'a monetary union']
我必须注意,我使用的是spacy2.3.5,最新版本中可能不推荐使用spacy.util.filter\u span
。这个答案对你有帮助。:)
而且,如果您仍然尝试将名词块柠檬化,您可以按照以下方式进行:
doc = nlp("the euro area has advanced a long way as a monetary union")
for chunk in doc.noun_chunks:
print(chunk.lemma_)
#['the euro area', 'a monetary union']
根据中的答案,“在跨度级别上查看引理可能不是很有用,在标记级别上工作更有意义。”