1

我一直在使用带有 spacy 和英文模型的 pytextrank ( https://github.com/DerwenAI/pytextrank/ ) 来提取关键字——效果很好!

现在我需要处理非英文文本,我找到了 udpipe ( https://github.com/TakeLab/spacy-udpipe ) 但它不能开箱即用......之后

nlp = spacy_udpipe.load("sk")
tr = pytextrank.TextRank()
nlp.add_pipe(tr.PipelineComponent, name="textrank", last=True)
doc = nlp(text)

我得到带有 POS 和 DEP 标签的令牌,但doc._.phrases(doc.noun_chunks也是空的) 中没有任何内容,并且nlp.pipe_names只是 ['textrank']

我应该在 spacy 的管道中添加什么以使其正常工作?我假设 pytextrank 需要 noun_chunks ......

任何提示或建议在哪里看都会对我有所帮助 - 谢谢!

4

2 回答 2

1

我找到了解决办法!我不确定它有多干净nlp.Defaults.syntax_iterators = {"noun_chunks" : get_chunks},但它可以工作(它基于 noun_chunkssyntax_iterators.py__init__.pyin 中的定义方式spaCy/lang/en

import spacy_udpipe, spacy, pytextrank
from spacy.matcher import Matcher
from spacy.attrs import POS

def get_chunks(doc):
    np_label = doc.vocab.strings.add("NP")
    matcher = Matcher(nlp.vocab)
    pattern = [{POS: 'ADJ', "OP": "+"}, {POS: {"IN": ["NOUN", "PROPN"]}, "OP": "+"}]
    matcher.add("Adjective(s), (p)noun", None, pattern)
    matches = matcher(doc)

    for match_id, start, end in matches:
        yield start, end, np_label

spacy_udpipe.download("sk") # download model
nlp = spacy_udpipe.load("sk")
nlp.Defaults.syntax_iterators = {"noun_chunks" : get_chunks}  #noun_chunk replacement

tr = pytextrank.TextRank(logger=None)
nlp.add_pipe(tr.PipelineComponent, name="textrank", last=True)

text = "Wikipédia je webová encyklopédia s otvoreným obsahom, ktorú možno slobodne čítať aj upravovať. Je sponzorovaná neziskovou organizáciou Wikimedia Foundation. Má 285 nezávislých jazykových vydaní vrátane slovenského a najrozsiahlejšieho anglického. Popri článkoch encyklopedického typu obsahuje, najmä anglická encyklopédia, aj články podobajúce sa almanachu, atlasu či stránky aktuálnych udalostí. Wikipédia je jedným z najpopulárnejších zdrojov informácií na webe s približne 13 miliardami zobrazení mesačne. Jej rast je skoro exponenciálny. Wikipédii (takmer 2 milióny). Wikipédia bola spustená 15. januára 2001 ako doplnok k expertmi písanej Nupedii. So stále rastúcou popularitou sa Wikipédia stala podhubím pre sesterské projekty ako Wikislovník (Wiktionary), Wikiknihy (Wikibooks) a Wikisprávy (Wikinews). Jej články sú upravované dobrovoľníkmi vo wiki štýle, čo znamená, že články môže meniť v podstate hocikto. Wikipediáni presadzujú politiku „nestranný uhol pohľadu“. Podľa nej relevantné názory ľudí sú sumarizované bez ambície určiť objektívnu pravdu. Vzhľadom na to, že Wikipédia presadzuje otvorenú filozofiu, jej najväčším problémom je vandalizmus a nepresnosť. "
doc = nlp(text)

print("Noun chunks:")
for nc in doc.noun_chunks:
    print(nc)

print("\nKeywords:")
for phrase in doc._.phrases:
    print("{:.4f} {:5d}  {}".format(phrase.rank, phrase.count, phrase.text))
    print(phrase.chunks)  
于 2020-03-04T07:36:57.810 回答
1

你介意在 PyTextRank repo 上开始一个关于这个的问题吗? https://github.com/DerwenAI/pytextrank/issues

此外,如果您可以请提供要使用的示例文本(以所要求的语言)

我们将尝试调试此集成。

感谢您指出!

帕科

于 2020-02-14T23:59:17.530 回答