我怎样才能阅读这样的语料库?

how can I read through such a corpus?

实际上我要为波斯语制作一个 HMM 词性标注器。我正在处理如下的语料库。左边的第一列包含波斯语单词,右边的第二列是 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

您可以通过使用 space 拆分行来简单地创建您的单词字典,但请注意,由于您的单词之间有 space,您可以使用 re 模块来拆分基于 3 space 或更多 :

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 方法或正则表达式,然后用你的相应项目替换单词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()方法,因为你的句末有一个点,而你的最后一个字和dot.So我之间没有space使用 re.findall 查找所有单词(长度为 1 或多个单词字符 (\w+) 的组合)和 none 白色 space 字符 (\S+)。

如果你想提取你的句子,你需要根据点或精确地使用以下正则表达式来分割你的语料库,然后使用 mapzip :

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 嵌套列表的第一个索引中有你的波斯语句子,在第二个索引中有标签。

你可以通过以下方式得到你的句子:

for i in persian_sent:
    print ''.join(list(i)[0])

另请注意,由于 python 3 returns 中的 zip 生成器,您需要将其转换为列表才能对其进行索引!