尝试对文本进行柠檬化时出现断言错误(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