【发布时间】:2021-11-19 16:26:00
【问题描述】:
我有一个棘手的问题,我不知道如何解决,所以我会尝试彻底解释它。我的数据框有 5 列,这是一个示例行:
title in_id tar_id in tar
[('<IN>This</IN>', 'DET', 'nsubj'), ('is', 'VERB', 'ROOT'), ('an', 'DET', 'det'), ('example', 'NOUN', 'compound'), ('text', 'NOUN', 'attr'), ('that', 'DET', 'dobj'), ('I', 'PRON', 'nsubj'), ('use', 'VERB', 'relcl'), ('in', 'ADP', 'prep'), ('order', 'NOUN', 'pobj'), ('to', 'PART', 'aux'), ('<TAR>get</TAR>', 'VERB', 'acl'), ('<TAR>an</TAR>', 'DET', 'det'), ('answer', 'NOUN', 'dobj')] 2137 2984 [1] [12, 13]
所以在title中我们有一个元组列表,其中第一个元组元素是一个单词,第二个是词性标签,第三个是它的依赖树标签。
in 和 tar 列是数组,它们映射到我想分别用“单词”或“单词”标记的句子中单词的位置。
in_id 和 tar_id 映射到它们的 ID。
我想要的是这个:
如果在in 和/或tar 中有多个值(例如在我显示tar=[12, 13] 的行中,我希望位置12 和13 的单词成为一个元组而不是两个单独的元组。
所以这个('<TAR>get</TAR>', 'VERB', 'acl'), ('<TAR>an</TAR>', 'DET', 'det')
应该变成这样:
('<TAR>get an</TAR>', 'TAR', '')
所以 2 个元组的第一个元素合并,第二个元素被重命名为列名(IN 或 TAR,第三个元素为空。
cols = list(df.columns)[4:]
for i in range(len(df))
parsed_sent = []
for idx, row in df.iterrows():
doc = nlp(row['title'])
dep_sents = [(token.text, token.pos_, token.dep_) for token in doc if not token.pos_ == "PUNCT"]
for position, tuple_ in enumerate(dep_sents):
word = tuple_[0]
pos_tag = tuple_[1]
dep = tuple_[2]
for col in cols:
if position in row[col]:
word = f'<{col.upper()}>{word}</{col.upper()}>'
else:
word = word
tuple_ = (word, pos_tag, dep)
dep_sents[position] = tuple_
parsed_sent.append(dep_sents)
df['title'] = parsed_sent
【问题讨论】: