阅读nltk的文档,我发现可以使用str2tuple()
提取元组。作为一个例子假设我有以下句子(显然是一个更大的文件):
sent = "pero pero CC " \
"tan tan RG " \
"antigua antiguo AQ0FS0 " \
"que que CS " \
"según según SPS00 " \
"mi mi DP1CSS " \
"madre madre NCFS000"
我想提取一个元组列表,例如:
> ([antigua, AQ0FS0],[madre, NCFS000])
女性形容词标记(AQ0FS0)
和女性名词标记(NCFS000)
。这可能是str2tuple()
还是更好的方法可以使用正则表达式?
这就是我的尝试:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import nltk as nl
sent = "pero pero CC " \
"tan tan RG " \
"antigua antiguo AQ0FS0 " \
"que que CS " \
"según según SPS00 " \
"mi mi DP1CSS " \
"madre madre NCFS000"
nl.tag.str2tuple(t) for t in sent.split()
答案 0 :(得分:1)
我认为你所拥有的是一个垂直文本文件,又称为.vrt
,请参阅CWB encoding Corpus
我想第一列是单词的表面形式,第二列是某种引理,第三列是词性文本。
首先看看csv
模块,我觉得本教程很有用,http://www.pythonforbeginners.com/systems-programming/using-the-csv-module-in-python/
假设您有一个制表符分隔文件:
pero pero CC
tan tan RG
antigua antiguo AQ0FS0
que que CS
según según SPS00
mi mi DP1CSS
madre madre NCFS000
要阅读文件,有时人们称之为“解析文件”:
import csv
with open('test.txt', 'r') as fin:
reader = csv.reader(fin, delimiter='\t')
for line in reader:
word, lemma, pos = line
print word, lemma, pos
要获得句子的(word,pos)
元组结构,请尝试:
import csv
sentences = []
with open('test.txt', 'r') as fin:
reader = csv.reader(fin, delimiter='\t')
for line in reader:
word, lemma, pos = line
sentences.append((word, pos))
print sentences
[OUT]:
[('pero', 'CC'), ('tan', 'RG'), ('antigua', 'AQ0FS0'), ('que', 'CS'), ('seg\xc3\xban', 'SPS00'), ('mi', 'DP1CSS'), ('madre', 'NCFS000')]
答案 1 :(得分:1)
由于您可能对将您的语料库与NLTK一起使用感兴趣:假设您的文件以此格式存储,您应该阅读它,解析它(使用str2tuple
或其他更简单的方法)并加载它与TaggedCorpusReader
。然后您可以使用所有标准的NLTK语料库功能。你基本上有两种类型的标签,词性和(推测)单词引理。如果这是您所追求的,我可以在此答案中添加更多具体信息。
假设你的字符串在每个三元组之后实际包含一个换行符,将它解析为元组列表的简单方法是这样的:
sent = """pero pero CC
tan tan RG
antigua antiguo AQ0FS0
que que CS
según según SPS00
mi mi DP1CSS
madre madre NCFS000"""
tuples = [ line.split() for line in sent.splitlines() ]
细节:split()
实际上返回一个列表,而不是一个元组。如果您需要将它们用作字典键,请将line.split()
替换为tuple(line.split())
。