.txt 文件中的错误输出格式

Bad output format in .txt file

我正在尝试打印到 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+tag的训练集,所以程序读取所有的输入文件,写一个输出文件,word+tag和文件中出现的次数。

有人可以帮我得到想要的结果吗?我是 Python...

的新手

提前致谢

这段代码对我来说似乎工作正常;但是它可以简化为

# 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"))

在使用 format() 构造输出字符串时,您需要将其设为 UTF-8 字符串以保存单词中的特殊字符。错误消息中提到的 'ascii' 编码的应用表明了这一点。 使用这个:

for word,count in wordcount.iteritems(): outf.write(u"{}\t{}\n".format(word, count).encode("utf-8"))

编辑: 抱歉,这应该是在 Hugh 近乎完美的解决方案之后出现的。我只是在回应 Gerard 得到的错误。 Hugh 没有 运行 解决这个问题,因为他 运行ning python 3.x 默认情况下将字符串作为 unicode 处理。