尝试对文本进行柠檬化时出现断言错误(python、StanfordNLP)

尝试对文本进行柠檬化时出现断言错误(python、StanfordNLP),python,stanford-nlp,lemmatization,Python,Stanford Nlp,Lemmatization,我想在数据框的一列中对文本进行柠檬化。我的脚本似乎使用一个短的测试数据帧,但每次我尝试在实际的项目文件上运行它时,都会出现断言错误。我认为这可能与文本的长度有关,但不确定如何处理 我的代码: import pandas as pd import stanfordnlp nlp = stanfordnlp.Pipeline(lang = "en", processors='tokenize,mwt,pos,lemma') def lemmatize(text): '''lemmatiz

我想在数据框的一列中对文本进行柠檬化。我的脚本似乎使用一个短的测试数据帧,但每次我尝试在实际的项目文件上运行它时,都会出现断言错误。我认为这可能与文本的长度有关,但不确定如何处理

我的代码:

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")
我得到的回溯是:

回溯(最近一次呼叫最后一次): 文件“lemmatize.py”,第28行,在 data_lemma=pd.DataFrame(data_clean.corpus.apply(lemmatizing)) 文件“/opt/anaconda3/lib/python3.7/site packages/pandas/core/series.py”,第4042行,适用于 mapped=lib.map\u推断(值,f,convert=convert\u数据类型) 文件“pandas/_libs/lib.pyx”,第2228行,在pandas中 文件“lemmatize.py”,第25行,在 柠檬化=λx:柠檬化(x) 文件“lemmatize.py”,第11行,在lemmatize中 doc=nlp(文本) 文件“/opt/anaconda3/lib/python3.7/site packages/stanfordnlp/pipeline/core.py”,第176行,调用 自我管理流程(doc) 文件“/opt/anaconda3/lib/python3.7/site packages/stanfordnlp/pipeline/core.py”,第170行,正在处理中 self.processors[processor_name]。进程(doc) 文件“/opt/anaconda3/lib/python3.7/site packages/stanfordnlp/pipeline/pos_processor.py”,第31行,正在处理中 对于枚举(批次)中的i、b: 文件“/opt/anaconda3/lib/python3.7/site packages/stanfordnlp/models/pos/data.py”,第120行,在iter中 屈服于自我。getitem(i) 文件“/opt/anaconda3/lib/python3.7/site packages/stanfordnlp/models/pos/data.py”,第91行,在getitem 断言长度(批次)=6

有什么问题吗?如果是文本的长度,有什么有效的方法来处理它?(我在该列中只有两个单元格,但这两个单元格中有相当多的文本需要进行柠檬化)


谢谢你的建议

错误发生在词性标记器中,即预引理化。尝试将
pos\u batch\u size
作为参数添加到
Pipeline
,并为其指定一个等于或大于最长句子的数字。根据Github问题

如果标记的句子长度超过
pos\u batch\u size
,则方法
chunk\u batch
创建随后触发断言的空批:
assert len(batch)==6

按如下方式更新代码,其中
max\u sent\u len
比您的最长句子长:

max_sent_len = 4096 
nlp = stanfordnlp.Pipeline(lang="en", processors='tokenize,mwt,pos,lemma', pos_batch_size=max_sent_len)
注意:我也使用depparse处理器,并且还必须更新
depparse\u batch\u size