我试图打印到lexic.txt这样的东西:
Palabra Tag Apariciones
mentales Adj 21
Joaquín_Sánchez_Garrido NP 1
tardíamente Adv 2
repito V 1
filipinos Adj 8
但我得到的输出如下:
Palabra Tag Apariciones
mentales Adj
21
Joaquín_Sánchez_Garrido NP
1
tardíamente Adv
2
repito V
1
filipinos Adj
8
这是Python代码:
file=open('corpus.txt','r')
data=file.readlines()
file.close()
diccionario = {}
for linea in data:
linea.decode('latin_1').encode('UTF-8') # para los acentos
palabra_tag = linea.split('\n')
cadena = str(palabra_tag[0])
if(diccionario.has_key(cadena)):
aux = diccionario.get(cadena)
aux += 1
diccionario.update({cadena:aux})
else:
diccionario.update({cadena:1})
outfile = open('lexic.txt', 'w')
outfile.write('Palabra\tTag\tApariciones\n')
for key, value in diccionario.iteritems() :
s = str(value)
outfile.write(key +" "+s+'\n')
outfile.close()
示例输入文件:
Al Prep
menos Adv
cinco Det
reclusos Adj
murieron V
en Prep
las Det
últimas Adj
24 Num
horas NC
en Prep
las Det
cárceles NC
de Prep
Valencia NP
y Conj
Barcelona NP
en Prep
incidentes NC
en Prep
los Det
que Pron
su Det
基本上,corpus.txt是一个带有word +标签的训练集,因此程序读取所有输入文件,并在文件中写入带有+标签和出现次数的输出文件。
有人可以帮助我获得理想的结果吗?我是Python的新手......
提前致谢
答案 0 :(得分:0)
代码似乎适合我;但它可以简化为
# Python 3
from collections import Counter
with open("corpus.txt", encoding="latin_1") as inf:
wordcount = Counter(line.rstrip() for line in inf)
with open("lexic.txt", "w", encoding="utf-8") as outf:
outf.write('Palabra\tTag\tApariciones\n')
for word,count in wordcount.items():
outf.write("{}\t{}\n".format(word, count))
或
# Python 2
from collections import Counter
with open("corpus.txt") as inf:
wordcount = Counter(line.decode("latin_1").rstrip() for line in inf)
with open("lexic.txt", "w") as outf:
outf.write('Palabra\tTag\tApariciones\n'.encode("utf-8"))
for word,count in wordcount.iteritems():
outf.write("{}\t{}\n".format(word, count).encode("utf-8"))
答案 1 :(得分:0)
使用format()构造输出字符串时,需要将其设为UTF-8字符串以保存单词中的特殊字符。 'ascii'的应用错误消息中提到的编码表明这一点。 使用此:
for word,count in wordcount.iteritems():
outf.write(u"{}\t{}\n".format(word, count).encode("utf-8"))
编辑: 对不起,这应该是在Hugh几乎完美的解决方案之后出现的。我只是回应杰拉德得到的错误。 Hugh没有遇到这个问题,因为他正在运行python 3.x,它默认将字符串作为unicode处理。