如何删除不需要的字符并只留下带有 POS 标签的实际单词?

How to remove unwanted chars and leave only actual words with POS tags?

使用 Python,我将文本文件数据的块拆分为如下列表(“我的列表”)中的句子。我需要弄清楚如何只提取单词标记及其相关的 POS 标签(包含在句子中)。我的目标是像这样的二元结构类型:[('Football', 'NNP'), ('Baltimore', 'NNP'), ('pulled', 'NNP'), ('off', 'IN'), ('a','IN'),('victory','NN'),(' .','.')]。我不想看到额外的 words/characters,例如 'I-NP' 和 'O' 以及 ':'。但是,句点 (.) 和逗号 (,) 都可以。如果可能的话,希望将它们保留在配对列表中。

我的名单:

 ['Football',
     'NNP',
     'I-NP',
     'O',
     '-',
     ':',
     'O',
     'O',
     'Baltimore',
     'NNP',
     'I-NP',
     'B-ORG',
     'pulled',
     'NNP',
     'I-NP',
     'O',
     'off',
     'IN',
     'I-PP',
     'O',
     'a',
     'IN',
     'I-NP',
     'O',
     'victory',
     'NN',
     'I-NP',
     'O',
     '.',
     '.',
     'O',
     'O']

我想看这样的,但不确定如何到达那里:

 [('Football', 'NNP'), ('Baltimore', 'NNP'), ('pulled', 'NNP'), ('off', 'IN'), ('a','IN'),('victory','NN'),('.','.')]

如果您可以描述将哪些行用于要保留的键和值,那么这个问题就很简单了。查看此处的数据,似乎您想排除输入列表中的项目:

  1. 不仅仅是字母和“.”
  2. 只是字母 'O'

排除您不想使用的项目后,字典项目的键和值只是对...[K, V, K, V...]。如果事实证明这对您的所有数据都不起作用,那么您需要弄清楚正确的选择标准是删除除组成您要从中创建字典的对的行之外的所有行。

这是使用上述标准为您提供所需内容的代码:

data = ['Football',
 'NNP',
 'I-NP',
 'O',
 '-',
 ':',
 'O',
 'O',
 'Baltimore',
 'NNP',
 'I-NP',
 'B-ORG',
 'pulled',
 'NNP',
 'I-NP',
 'O',
 'off',
 'IN',
 'I-PP',
 'O',
 'a',
 'IN',
 'I-NP',
 'O',
 'victory',
 'NN',
 'I-NP',
 'O',
 '.',
 '.',
 'O',
 'O']

data = [x for x in data if re.match(r"^[a-zA-Z.]+$", x) and x != 'O']

result = []
for i in range(0, len(data), 2):
     result.append({data[i]: data[i+1]})

print(result)

结果:

[{'Football': 'NNP'}, {'Baltimore': 'NNP'}, {'pulled': 'NNP'}, {'off': 'IN'}, {'a': 'IN'}, {'victory': 'NN'}, {'.': '.'}]