我有一个词性标记单词列表(每个元素的格式均为“单词|标签”),我试图找到一种删除某个“单词”后删除相应“标签”的方法。 ”更具体地说,我的算法只能处理每个元素的“单词”部分,因此我首先将当前的“单词” |“标签”列表分为两个单独的单词和标签列表。但是,从“单词”列表中删除了某些不必要的单词后,我想连接相应的标签。如何有效地从其他列表中删除相应的标签?还是有更好的方法来做到这一点?我最初尝试使用带有标记的单词来运行清理算法,但是找不到一种方法来忽略每个单词的标记。
通过显示我的代码,我的问题可能会更清楚:
my_list = ['I|PN', 'am|V', 'very|ADV', 'happy|ADJ']
tags = []
words = []
for i, x in enumerate(my_list):
front, mid, end = x.partition('|')
words.append(front)
tags.append(mid+end)
当前输出(在通过清理算法运行单词列表之后):
words = ['I', 'very', 'happy']
tags = ['PN', 'V', 'ADV', 'ADJ']
很显然,我无法再逐个元素地连接这些列表,因为我没有从删除的单词中删除相应的标签。
所需的输出:
words = ['I', 'very', 'happy']
tags = ['PN', 'ADV', 'ADJ']
如何实现以上输出?
答案 0 :(得分:2)
我建议您采用这种方法:
这是未经测试的实现:
word_list = ['I|PN', 'am|V', 'very|ADV', 'happy|ADJ']
def my_word_filter(pair):
word, tag = pair
# ... your word removal logic here. Return True if the word is OK,
# or false if you want it deleted. For example:
return word != 'am'
word_pairs = filter(my_word_filter, [w.split('|') for w in word_list])
words, tags = zip(*word_pairs)
# Now do whatever you want from the corresponding lists of words, tags
答案 1 :(得分:0)
您为什么不尝试使用python词典?
my_list={"I":"PN","am":"V","very":"ADV","happy":"ADJ"}
del my_list["am"]
print(my_list)
输出:
my_list={"I":"PN","very":"ADV","happy":"ADJ"}