:) Próbowałem używać w = Word (printables), ale to nie działa. Jak powinienem podać specyfikację? "w" służy do przetwarzania znaków hindi (UTF-8)Python - pyparsing znaków unicode
Kod określa gramatykę i odpowiednio analizuje.
671.assess :: अहसास ::2
x=number + "." + src + "::" + w + "::" + number + "." + number
Jeśli istnieje tylko znaki języka angielskiego to działa tak, że kod jest prawidłowy dla formacie ASCII, ale kod nie działa w formacie Unicode.
To znaczy, że kod działa, gdy mamy coś formularza 671.assess :: ahsaas :: 2
czyli analizuje słowa w angielskim formacie, ale nie jestem pewien, jak analizować, a następnie drukuj znaki w formacie Unicode. Potrzebuję tego do celów wyrównania angielskich słów w języku hindi.
Kod pyton wygląda następująco:
# -*- 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('[email protected]#$%')
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()
'''
jeśli przykładem zdanie wejście do pliku źródłowego jest:
1# 5 # modern markets : confident consumers # 0 0 0 0 0
1# 6 # AddhUnIk baajaar : AshHvsHt upbhOkHtaa . # 0 0 0 0 0 0
[email protected]#$%
ouptut będzie wyglądać następująco: -
1# 5 # modern markets : confident consumers # 1 2 3 4 5
1# 6 # AddhUnIk baajaar : AshHvsHt upbhOkHtaa . # 1 2 3 4 5 0
[email protected]#$%
Wyjście Objaśnienie: - Zapewnia to dwukierunkowe wyrównanie. Oznacza to pierwsze słowo z angielskich "nowoczesnych" map do pierwszego słowa hindi "AddhUnIk" i na odwrót. Tutaj nawet postacie są traktowane jako słowa, ponieważ są one również integralną częścią mapowania dwukierunkowego. Jeśli więc zaobserwujesz hinduistyczne SŁOWO ". ma zerowy układ i nic nie odwzorowuje w odniesieniu do zdania angielskiego, ponieważ nie ma pełnego zatrzymania. Trzecia linia na wyjściu generalnie reprezentuje ogranicznik, gdy pracujemy dla wielu zdań, dla których próbujesz osiągnąć odwzorowanie dwukierunkowe.
Jakie zmiany należy wprowadzić, aby działały, jeśli mam zdania hindi w formacie Unicode (UTF-8).
Proszę edytować to pytanie i skorzystać z poprawnym formatowaniem tak, że pytanie jest czytelny –