试图对文本进行词法化时出现断言错误(python,StanfordNLP)

问题描述 投票:0回答:1

我想在数据框的一列中对文本进行词法分离。我的脚本似乎可以在较短的测试数据帧上运行,但是每次尝试在实际项目文件上运行它时,都会收到断言错误。我认为这可能与文本的长度有关,但不确定如何处理。

我的代码:

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")

我得到的回溯是:

追踪(最近通话):在第28行的文件“ lemmatize.py”中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_dtype)在pandas._libs.lib.map_infer中的文件“ pandas / _libs / lib.pyx”,第2228行在第25行中输入“ lemmatize.py”文件lemmatizing = lambda x:lemmatize(x)在lemmatize中的文件“ lemmatize.py”,第11行doc = nlp(文本)call中的文件“ /opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/pipeline/core.py”,行176self.process(doc)正在处理文件“ /opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/pipeline/core.py”,行170self.processors [处理器名称] .process(doc)文件“ /opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/pipeline/pos_processor.py”,正在处理中对于i,b的枚举(批次):iter中的文件“ /opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/models/pos/data.py”,第120行产生自我。getitem(i)getitem中第91行的文件“ /opt/anaconda3/lib/python3.7/site-packages/stanfordnlp/models/pos/data.py”断言len(batch)== 6

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

谢谢您的任何建议!

python stanford-nlp lemmatization
1个回答
0
投票

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

如果您标记的句子长于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

© www.soinside.com 2019 - 2024. All rights reserved.