拆分列表并删除Python中的相应元素

时间:2018-07-23 18:17:23

标签: python list nlp concatenation

我有一个词性标记单词列表(每个元素的格式均为“单词|标签”),我试图找到一种删除某个“单词”后删除相应“标签”的方法。 ”更具体地说,我的算法只能处理每个元素的“单词”部分,因此我首先将当前的“单词” |“标签”列表分为两个单独的单词和标签列表。但是,从“单词”列表中删除了某些不必要的单词后,我想连接相应的标签。如何有效地从其他列表中删除相应的标签?还是有更好的方法来做到这一点?我最初尝试使用带有标记的单词来运行清理算法,但是找不到一种方法来忽略每个单词的标记。

通过显示我的代码,我的问题可能会更清楚:

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']

如何实现以上输出?

2 个答案:

答案 0 :(得分:2)

我建议您采用这种方法:

  1. 将您的输入拆分为(单词,标签)的元组
  2. 根据需要过滤元组列表
  3. 将其余的元组列表转换为单词/标签的两个列表

这是未经测试的实现:

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"}