我该如何阅读这样的语料库?

时间:2015-07-10 20:31:20

标签: python-3.x nltk

实际上,我要为波斯语制作一个HMM POS标记器。我正在研究如下语料库。左边的第一列包含波斯语单词,右边的第二列包含POS标签。 我的问题是,我如何阅读它,根据句子对其进行标记,然后将标签和单词保存在列表中,如下面的代码那样?

words = [nltk.word_tokenize(s) for s in sentences]
tagged = [nltk.pos_tag(w) for w in words]  

任何可以帮助我的建议或代码?

    #                                             DELM
اولين                                             ADJ_SUP
سياره                                             N_SING
خارج                                              ADJ_SIM
از                                                P
منظومه                                            N_SING
شمسي                                              ADJ_SIM
ديده                                              ADJ_INO
شد                                                V_PA
.                                                 DELM
#                                                 DELM
#                                                 DELM
واشنگتن                                           N_SING
ـ                                                 DELM
خبرگزاري                                          N_SING
جمهوري                                            N_SING
اسلامي                                            ADJ_SIM
#                                                 DELM
ستاره شناسان                                      N_PL
مي گويند                                          V_PRS
كه                                                CON
ممكن                                              ADJ_SIM
است                                               V_PRE
اولين                                             ADJ_SUP
سياره                                             N_SING
خارج                                              ADJ_SIM
از                                                P
منظومه                                            N_SING
شمسي                                              ADJ_SIM
را                                                P
ديده                                              ADJ_INO
باشند                                             V_SUB
.                                                 DELM

1 个答案:

答案 0 :(得分:1)

你可以简单地用空格分割你的单词字典,但请注意,由于你的单词之间有空格,你可以使用re模块基于3个或更多空格进行分割:

import re
with open('out.txt') as f:
    tags=dict(map(lambda x:re.split(r' {3,}',x.strip()),f))

然后你可以通过索引获得正确的标签:

print (tags['منظومه'])
'N_SING'

然后在您的主要文字中,当您想要标记您的单词时,您可以根据需要拆分文本,您可以使用简单的字符串split方法或正则表达式,然后将该单词替换为{{{{{{ 1}}字典。

示例:

tags

请注意,在这里你不能使用s='اولين سياره خارج از منظومه شمسي ديده شد.' tagged_sentence=[(i,tags[i]) for i in re.findall(r'\w+|\S+',s) if i] print (tagged_sentence) [('اولين', 'ADJ_SUP'), ('سياره', 'N_SING'), ('خارج', 'ADJ_SIM'), ('از', 'P'), ('منظومه', 'N_SING'), ('شمسي', 'ADJ_SIM'), ('ديده', 'ADJ_INO'), ('شد', 'V_PA'), ('.', 'DELM')] 方法,因为你的句子末尾有一个点,你的最后一个单词和点之间没有空格。所以我用str.split()查找所有单词(长度为1或更多单词字符的组合(re.findall))和无空白字符(\w+)。

如果要提取句子,则需要根据点拆分语料库或使用以下正则表达式精确分割,然后使用\S+map

zip

因此,在import re with open('out.txt') as f: all_sentences=re.findall(r'([^.]*\.[^\n]*)',f.read()) persian_sent=[zip(*map(lambda x:re.split(r' {3,}',x.strip()),i.split('\n'))) for i in all_sentences if i] 内嵌套列表的第一个索引和第二个索引中的标记之后,你的波斯语句子就会出现。

你可以这样做:

persian_sent

另请注意,因为python 3中的for i in persian_sent: print ''.join(list(i)[0]) 返回一个生成器,所以当你想索引它时需要将它转换为list!