我很抱歉用同一文本文件提问。 下面是我的工作文本文件字符串。
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')]
即。二元数据列表。我需要你的建议。
答案 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']]