【发布时间】: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