过滤标签集并生成bigram序列

时间:2016-05-23 03:37:01

标签: python regex

我很抱歉用同一文本文件提问。 下面是我的工作文本文件字符串。

The/at Fulton/np-tl County/nn-tl Grand/jj-tl Jury/nn-tl said/vbd Friday/nr an/at investigation/nn of/in Atlanta's/np$ recent/jj primary/nn election/nn produced/vbd

此字符串由"word / its tag"格式组成,如您所见。从这个字符串中,我想只过滤"noun + adjective"的序列并将它们转换为二元组。例如,"Grand/jj-tl Jury/nn-tl"是我想要的确切单词序列。 (nn表示名词,jj表示形容词,"-tl"等附加词是关于标记的附加信息。)

也许这将是轻松的工作。我首先使用正则表达式进行过滤。以下是我的代码。

import re
f = open(textfile)
raw = f.read()
tag_list = re.findall("\w+/jj-?\w* \w+/nn-?\w*", raw)
print tag_list 

此代码为我提供了确切的单词列表。但是,我想要的是二元数据。那段代码只给我一个单词列表,比如这样。

['Grand/jj-tl Jury/nn-tl', 'recent/jj primary/nn', 'Executive/jj-tl Committee/nn-tl']

我想要转换此数据,如下所示。

[('Grand/jj-tl, Jury/nn-tl'), ('recent/jj ,primary/nn'), ('Executive/jj-tl , Committee/nn-tl')]

即。二元数据列表。我需要你的建议。

1 个答案:

答案 0 :(得分:1)

我认为一旦你找到了tag_list,那么仅仅使用列表理解就应该是一件容易的事:

>>> tag_list = ['Grand/jj-tl Jury/nn-tl', 'recent/jj primary/nn', 'Executive/jj-tl Committee/nn-tl']
>>> [tag.replace(' ', ', ') for tag in tag_list]
['Grand/jj-tl, Jury/nn-tl', 'recent/jj, primary/nn', 'Executive/jj-tl, Committee/nn-tl']

在您的原始演示中,我不确定您为什么会('Grand/jj-tl, Jury/nn-tl'),我也不确定您为什么要使用逗号加入这些双字母组合。

我认为最好有一个列表列表,其中内部列表包含bigram数据:

>>> [tag.split() for tag in tag_list]
[['Grand/jj-tl', 'Jury/nn-tl'], ['recent/jj', 'primary/nn'], ['Executive/jj-tl', 'Committee/nn-tl']]