【问题标题】:Stem Spanish words in isolation to validate that they are "words" in SpaCy's (or any) dictionary单独提取西班牙语单词以验证它们是 SpaCy(或任何)词典中的“单词”
【发布时间】:2021-07-27 09:03:58
【问题描述】:

我有一个包含 20,000 个单词的列表。我想知道这 20k 个单词中的哪些单词在某种程度上是“奇怪的”。这是文本清理任务的一部分。

Albóndiga 很好,huticotai 不是我知道的西班牙语单词...56%$3estapa 也不是

这意味着我必须将孤立的拒绝/变位词与某些事实来源进行比较。每个人都推荐 SpaCy。很好。

然而,不知何故,使用下面的代码和一个包含几十个单词的测试文件,spaCy 认为它们都是“ROOT”单词。 Si hablas castellano, sabrás que así no es。 从技术上讲,我不想对任何东西进行词形还原!我想阻止这些话。 我只想将 20k 长的单词表与我作为说西班牙语的语言学家可以查看的内容配对,以确定正在发生什么样的疯狂 demadre (B.S.)。

这是我得到的输出示例:

  • trocito NOUN ROOT trocito
  • ayuntamiento NOUN ROOT ayuntamiento
  • eyre 名词词根 eyre
  • suscribíos NOUN ROOT suscribío
  • 梅斯卡尔 ADJ ROOT 梅斯卡尔
  • marivent 动词根 mariventir
  • inversores NOUN ROOT inversor
  • stenger 动词词根 stenger

显然,“stenger”不是西班牙语单词,尽管 spaCy 认为它是天真的。 Mezcal 是一个名词(也是一个非常好的时间)。你明白了。

这是我的代码:

import spacy
nlp = spacy.load("es_core_news_sm")

new_lst = []
with open("vocabu_suse.txt", 'r') as lst:
    for i in lst:
        # print(i)
        new_lst.append(i.strip())

for i in new_lst:
    j = nlp(i)
    for token in j:
        print(token.text, token.pos_, token.dep_, token.lemma_)

【问题讨论】:

    标签: nlp spacy stemming lemmatization


    【解决方案1】:

    我很困惑你在这里要做什么。明确地说,我的理解是,您的主要目标是找出列表中的哪些单词不是垃圾,并且您尝试使用词形还原来检查它们,并且词形还原结果似乎是错误的。

    这意味着我必须将孤立的拒绝/变位词与某些事实来源进行比较。每个人都推荐 SpaCy。很好。

    spaCy 非常适合许多 NLP 任务,但处理没有上下文的单词列表确实不是它的本意,我认为它在这里对你没有多大帮助。

    寻找真实的词

    解决您的主要问题...

    首先,要找出哪些词不是垃圾,你可以使用你信任的词表或相对正常的大型语料库。

    如果您没有您信任的词表,您可以查看这些词是否在 spaCy 模型的词汇中。 spaCy 的词汇可以包含垃圾词,但由于它们是按频率构建的,它应该只包含常见错误。这个wordfreq repo 也可能有帮助。

    要检查一个词在 spaCy 中是否有词向量,在中型或大型模型中您可以使用tok.is_oov

    如果您想从语料库中取出,请使用您拥有的语料库或维基百科或其他东西,并丢弃低于特定字数阈值的单词。 (我知道屈折变化会使这变得更加困难,但是对于足够大的语料库,您仍然应该以一定的频率找到真实的单词。)

    关于根

    ROOT标签是依赖标签,不是单词形式的标签。在句子的依赖解析中,ROOT 通常是主要动词。在一个词的句子中,那个词永远是词根。

    我认为您需要 tag_ 属性,这是一个详细的特定于语言的 POS 标记。 pos_ 属性是为多语言应用程序设计的粗粒度标签。

    关于词形还原

    我不明白这个说法。

    从技术上讲,我不想对任何东西进行词形还原!我想阻止这些词。

    词形还原几乎总是比词干更好。 “词干”通常是指基于标记模式的基于规则的过程,因此对于您的特定问题它根本不会帮助您 - 它只会告诉您单词是否有共同的词尾或其他东西。你可以有一个像“asdfores”这样的词,词干分析器会很高兴地告诉你它是“asdfor”的复数形式。 Lemmatizers 通常基于已检查的单词数据库,因此更接近您的需要。

    在任何一种情况下,spaCy 都不进行词干提取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-05
      • 2017-08-14
      • 1970-01-01
      • 2013-05-13
      • 2014-12-05
      • 2010-10-28
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多