如何解决Pandas提取德语POS标注名词时的解包错误?
解决德语POS标注名词提取的ValueError问题
你的错误根源在于每个标注元组包含三个元素(原始词、标准化词、POS标签),但你在列表推导式里只尝试拆成两个变量word, tag,导致Python报错“too many values to unpack (expected 2)”。
修复方案一:直接正确拆包三个元素
如果你想提取标准化后的名词(比如元组里的第二个值,像Waffe),可以直接在推导式里拆出三个变量,只保留需要的部分:
import pandas as pd data = {"tagged": [[("waffe", "Waffe", "NN"), ("haus", "Haus", "NN")], [("groß", "groß", "ADJD"), ("bereich", "Bereich", "NN")]]} df = pd.DataFrame(data=data) # 提取标准化名词(第二个元素),过滤NN/NE标签 df["nouns"] = df["tagged"].apply(lambda x: [std_word for raw_word, std_word, tag in x if tag in ["NN", "NE"]])
修复方案二:先移除元组的第一个元素再处理
如果你确实想先删除每个元组的第一个值,再进行后续提取,可以先对每个元组做切片处理:
import pandas as pd data = {"tagged": [[("waffe", "Waffe", "NN"), ("haus", "Haus", "NN")], [("groß", "groß", "ADJD"), ("bereich", "Bereich", "NN")]]} df = pd.DataFrame(data=data) # 先去掉每个元组的第一个元素,再提取名词 df["nouns"] = df["tagged"].apply( lambda x: [word for word, tag in (item[1:] for item in x) if tag in ["NN", "NE"]] )
两种方案都能正常运行,最终df["nouns"]列会得到过滤后的名词列表:
0 [Waffe, Haus] 1 [Bereich] Name: nouns, dtype: object
内容的提问来源于stack exchange,提问作者stacksterppr
相关产品推荐
相关产品推荐

