【问题标题】:Assertion error when trying to lemmatise text (python, StanfordNLP)尝试对文本进行词形还原时出现断言错误(python、StanfordNLP)
【发布时间】:2020-03-11 09:32:10
【问题描述】:

我想对数据框的一列中的文本进行词形还原。我的脚本似乎适用于一个简短的测试数据框,但每次我尝试在我的实际项目文件上运行它时,我都会收到一个断言错误。我认为这可能与文本的长度有关,但不知道如何处理。

我的代码:

import pandas as pd
import stanfordnlp
nlp = stanfordnlp.Pipeline(lang = "en", processors='tokenize,mwt,pos,lemma')


def lemmatize(text):
    '''lemmatize'''
    count = 0
    fout = open('text_lemmatized.txt', 'w+')
    doc = nlp(text)
    for sent in doc.sentences:
        for word in sent.words:
            word = word.lemma
            fout.write(str(word))
            fout.write(" ")
            count = count + 1
            fout = open('text_lemmatized.txt', 'r')
            text = fout.read()
            print(text)
            return text

lemmatizing = lambda x: lemmatize(x)

data = pd.read_csv("data.csv")
data_lemma = pd.DataFrame(data.text.apply(lemmatizing))
data_lemma.to_csv("lemma-text-en.csv")

我得到的 Traceback 是:

Traceback(最近一次调用最后一次): 文件“lemmatize.py”,第 28 行,在 data_lemma = pd.DataFrame(data_clean.corpus.apply(lemmatizing)) 文件“/opt/anaconda3/lib/python3.7/site-packages/pandas/core/series.py”,第 4042 行,在应用中 映射= lib.map_infer(值,f,convert=convert_dtype) 文件“pandas/_libs/lib.pyx”,第 2228 行,在 pandas._libs.lib.map_infer 文件“lemmatize.py”,第 25 行,在 lemmatizing = lambda x: lemmatize(x) lemmatize 中的文件“lemmatize.py”,第 11 行 doc = nlp(文本) 调用中的文件“/opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/pipeline/core.py”,第 176 行 self.process(doc) 文件“/opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/pipeline/core.py”,第 170 行,正在进行中 self.processors[processor_name].process(doc) 文件“/opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/pipeline/pos_processor.py”,第 31 行,正在进行中 对于 i, b in enumerate(batch): iter 中的文件“/opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/models/pos/data.py”,第 120 行 产生自我。getitem(i) getitem 中的文件“/opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/models/pos/data.py”,第 91 行 断言 len(batch) == 6

似乎是什么问题?如果是文本的长度,那么处理它的有效方法是什么? (我在该列中只有两个单元格,但是这两个单元格中有相当多的文本需要进行词形还原)。

感谢您的任何建议!

【问题讨论】:

    标签: python stanford-nlp lemmatization


    【解决方案1】:

    该错误发生在词性标注器中,预词法化。尝试将pos_batch_size 作为参数添加到Pipeline,并为其指定一个等于或大于最长句子的数字。根据thisGithub issue,

    如果你标记的句子长于pos_batch_size,方法chunk_batches 创建随后触发断言的空批次:assert len(batch) == 6

    如下更新您的代码,其中max_sent_len 比您最长的句子长:

    max_sent_len = 4096 
    nlp = stanfordnlp.Pipeline(lang="en", processors='tokenize,mwt,pos,lemma', pos_batch_size=max_sent_len)
    

    注意:我也使用 depparse 处理器,并且还必须更新 depparse_batch_size

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 2018-01-05
      相关资源
      最近更新 更多