我尝试使用w = Word(printables),但无法正常工作。我应该如何为此提供规格。“w”用于处理印地语字符(UTF-8)
该代码指定语法并进行相应的解析。
671.assess :: अहसास ::2 x=number + "." + src + "::" + w + "::" + number + "." + number
如果只有英文字符,则该代码可以正常工作,因此该代码对于ASCII格式是正确的,但对于Unicode格式则无效。
我的意思是,当我们使用671.assess :: ahsaas :: 2形式的代码时,代码可以工作
即它解析英语格式的单词,但是我不确定如何解析然后以unicode格式打印字符。我需要将其用于英语北印度语单词对齐。
python代码如下所示:
# -*- coding: utf-8 -*- from pyparsing import Literal, Word, Optional, nums, alphas, ZeroOrMore, printables , Group , alphas8bit , # grammar src = Word(printables) trans = Word(printables) number = Word(nums) x=number + "." + src + "::" + trans + "::" + number + "." + number #parsing for eng-dict efiledata = open('b1aop_or_not_word.txt').read() eresults = x.parseString(efiledata) edict1 = {} edict2 = {} counter=0 xx=list() for result in eresults: trans=""#translation string ew=""#english word xx=result[0] ew=xx[2] trans=xx[4] edict1 = { ew:trans } edict2.update(edict1) print len(edict2) #no of entries in the english dictionary print "edict2 has been created" print "english dictionary" , edict2 #parsing for hin-dict hfiledata = open('b1aop_or_not_word.txt').read() hresults = x.scanString(hfiledata) hdict1 = {} hdict2 = {} counter=0 for result in hresults: trans=""#translation string hw=""#hin word xx=result[0] hw=xx[2] trans=xx[4] #print trans hdict1 = { trans:hw } hdict2.update(hdict1) print len(hdict2) #no of entries in the hindi dictionary print"hdict2 has been created" print "hindi dictionary" , hdict2 ''' ####################################################################################################################### def translate(d, ow, hinlist): if ow in d.keys():#ow=old word d=dict print ow , "exists in the dictionary keys" transes = d[ow] transes = transes.split() print "possible transes for" , ow , " = ", transes for word in transes: if word in hinlist: print "trans for" , ow , " = ", word return word return None else: print ow , "absent" return None f = open('bidir','w') #lines = ["'\ #5# 10 # and better performance in business in turn benefits consumers . # 0 0 0 0 0 0 0 0 0 0 \ #5# 11 # vHyaapaar mEmn bEhtr kaam upbhOkHtaaomn kE lIe laabhpHrdd hOtaa hAI . # 0 0 0 0 0 0 0 0 0 0 0 \ #'"] data=open('bi_full_2','rb').read() lines = data.split('!@#$%') loc=0 for line in lines: eng, hin = [subline.split(' # ') for subline in line.strip('\n').split('\n')] for transdict, source, dest in [(edict2, eng, hin), (hdict2, hin, eng)]: sourcethings = source[2].split() for word in source[1].split(): tl = dest[1].split() otherword = translate(transdict, word, tl) loc = source[1].split().index(word) if otherword is not None: otherword = otherword.strip() print word, ' <-> ', otherword, 'meaning=good' if otherword in dest[1].split(): print word, ' <-> ', otherword, 'trans=good' sourcethings[loc] = str( dest[1].split().index(otherword) + 1) source[2] = ' '.join(sourcethings) eng = ' # '.join(eng) hin = ' # '.join(hin) f.write(eng+'\n'+hin+'\n\n\n') f.close() '''
如果源文件的示例输入语句为:
1# 5 # modern markets : confident consumers # 0 0 0 0 0 1# 6 # AddhUnIk baajaar : AshHvsHt upbhOkHtaa . # 0 0 0 0 0 0 !@#$%
输出看起来像这样:-
1# 5 # modern markets : confident consumers # 1 2 3 4 5 1# 6 # AddhUnIk baajaar : AshHvsHt upbhOkHtaa . # 1 2 3 4 5 0 !@#$%
输出说明:-这实现了双向对齐。这意味着英语“现代”的第一个单词映射到印地语“ AddhUnIk”的第一个单词,反之亦然。在这里,即使字符也是单词,因为它们也是双向映射的组成部分。因此,如果您观察印地语单词’。具有空对齐,并且相对于英语句子,它没有句号,因此没有映射。当我们处理许多试图实现双向映射的句子时,输出的第三行int基本表示定界符。
如果我使用Unicode(UTF-8)格式的印地文句子,我应该对其进行哪些修改才能起作用。
作为一般规则,也 没有处理编码的字节串:让他们到适当的Unicode字符串(通过调用它们的.decode方法)尽快,做你的处理总是Unicode字符串,然后,如果你要为I/O的目的,.encode它们返回到您需要的任何字节串编码中。
.decode
.encode
如果您在谈论文字,就好像您在代码中一样,那么“尽快” 即刻出现 :用于u'...'表达文字。在更一般的情况下,您被迫以编码形式进行I / O操作,它紧接在输入之后(就像您需要以特定的编码形式执行输出一样,就在紧接输出之前)。
u'...'