【问题标题】:spacy-udpipe with pytextrank to extract keywords from non-English textspacy-udpipe 与 pytextrank 从非英文文本中提取关键字
【发布时间】:2020-05-06 12:41:13
【问题描述】:

我一直在使用带有 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...

任何提示或建议可以帮助我 - 谢谢!

【问题讨论】:

  • 如何在 pandas 中实现 spacy pytextrank。我收到“TypeError:参数“字符串”的类型不正确(预期的字符串,得到系列)”。你能分享一些样品吗? t = [] for i in nlp(dn['Review_Train']): if review._.phrases: t.append(review.text)
  • @RVKNLP 这是一个非常不同的问题,与 UDpipe 无关。您能否在github.com/DerwenAI/pytextrank/issues 上发布问题以及代码+数据+异常跟踪?当然,spaCypytextrank 可以与 pandas 一起使用,但您描述的错误似乎更多地与数据框输入的形状有关

标签: python nlp spacy udpipe pytextrank


【解决方案1】:

我找到了解决办法!我不确定nlp.Defaults.syntax_iterators = {"noun_chunks" : get_chunks} 有多干净,但它可以工作(它基于syntax_iterators.py__init__.pyspaCy/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)  

【讨论】:

    【解决方案2】:

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

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

    我们将尝试调试此集成。

    感谢您指出!

    帕科

    【讨论】:

    • 感谢您的回复-同时我意识到,这更多是 udpipe-spacy 的问题,它以某种方式“覆盖”了原始 spacy 的管道,因此不会生成 noun_chunks(顺便说一句,noun_chunks 是在 lang/en/syntax_iterators.py 中创建的但它并不适用于所有语言,所以即使它被调用,它也不适用于斯洛伐克语)......我会在 pytextrank 中添加一个问题,因为我认为它可能是一个很好的加载增强“noun_chunks”,例如来自使用匹配器的自定义扩展)
    猜你喜欢
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多