Php kullanarak bir yazı haritadan Ascii 2 Unicode dönüştürme

0 Cevap php

Ben yeni unicode yazı ASCII olmayan ingilizce yazı eski metin dönüştürmek çalışıyorum. Böylece anahtarlar maped hav. Ben seçeneği var. İlk şey ben bu sample.map gibi bir harita dosyası (txtfile) sahip olduğu

w=à´‚
x=à´ƒ
A=à´…
B=à´†
C=à´‡
Cu=à´ˆ
D=à´‰
Du=à´Š
E=à´‹
\p=ഌ
F=à´Ž
G=à´
sF=à´
H=à´’
Hm=à´“
Hu=à´”
I=à´•
J=à´–

Kod sağ tarafında bir bütün sol yan karakteri değiştirmek zorunda kalacak. Nasıl her karakter i yoluyla döngü yapmak ve harita dosyadan bilgi alarak onları değiştirin. Ben bulmak ve yerini teknikleri ile ancak başarısızlık ile çalışıyorlar. Nasıl php belgeyi bozmadan yerine her char. Harita uzantısı ve döngü ile txt dosyası ve bu özel harita dosyayı okuyabilir yapabilir?

Here is complete map file

I also found a python script to do this, i couldn't port it to php. Am very weak in python I'm pasting the code here:

import sys 
import codecs 
import os 
from optparse import OptionParser 

class Payyan:

 def __init__(self):
  self.input_filename =""
  self.output_filename=""
  self.mapping_filename=""
  self.rulesDict=None
  self.pdf=0

 def word2ASCII(self, unicode_text):
  index = 0
  prebase_letter = ""
  ascii_text=""
  self.direction = "u2a"
  self.rulesDict = self.LoadRules()
  while index < len(unicode_text):
   '''This takes care of conjuncts '''
   for charNo in [3,2,1]:
    letter = unicode_text[index:index+charNo]
    if letter in self.rulesDict:
     ascii_letter = self.rulesDict[letter]
     letter = letter.encode('utf-8')
     '''Fixing the prebase mathra'''
     '''TODO: Make it generic , so that usable for all indian languages'''
     if letter == 'ൈ':
      ascii_text = ascii_text[:-1] + ascii_letter*2 + ascii_text[-1:]
     elif (letter == 'ോ') | (letter == 'ൊ') | (letter == 'ൌ'): #prebase+postbase mathra case
      ascii_text = ascii_text[:-1] + ascii_letter[0] + ascii_text[-1:] + ascii_letter[1]
     elif (letter == 'െ') | (letter == 'േ') |(letter == 'àµà´°'): #only prebase
      ascii_text = ascii_text[:-1] + ascii_letter + ascii_text[-1:]
     else:
      ascii_text = ascii_text + ascii_letter      
     index = index+charNo
     break
    else:
     if(charNo==1):
      index=index+1
      ascii_text = ascii_text + letter
      break;
     '''Did not get'''    
     ascii_letter = letter

  return ascii_text

 def Uni2Ascii(self):
  if self.input_filename :
   uni_file = codecs.open(self.input_filename, encoding = 'utf-8', errors = 'ignore')
  else :
   uni_file = codecs.open(sys.stdin, encoding = 'utf-8', errors = 'ignore')   
  text = ""
  if self.output_filename :
   output_file = codecs.open(self.output_filename, encoding = 'utf-8', errors = 'ignore',  mode='w+')   
  while 1:
      text =uni_file.readline()
   if text == "":
    break
   ascii_text = "" 
   ascii_text = self.word2ASCII(text)

   if self.output_filename :
    output_file.write(ascii_text)
   else:
    print ascii_text.encode('utf-8')
  return 0

 def word2Unicode(self, ascii_text):
  index = 0
  post_index = 0
  prebase_letter = ""
  postbase_letter = ""
  unicode_text = ""
  next_ucode_letter = ""
  self.direction="a2u"
  self.rulesDict = self.LoadRules()
  while index < len(ascii_text):
   for charNo in [2,1]:
    letter = ascii_text[index:index+charNo]
    if letter in self.rulesDict:
     unicode_letter = self.rulesDict[letter]
     if(self.isPrebase(unicode_letter)): 
      prebase_letter = unicode_letter
     else:
      post_index = index+charNo
      if post_index < len(ascii_text):
       letter = ascii_text[post_index]
       if letter in self.rulesDict:
        next_ucode_letter = self.rulesDict[letter]
        if self.isPostbase(next_ucode_letter):
         postbase_letter = next_ucode_letter
         index = index + 1
      if  ((unicode_letter.encode('utf-8') == "à´Ž") |
          ( unicode_letter.encode('utf-8') == "à´’" )):
       unicode_text = unicode_text + postbase_letter + self.getVowelSign(prebase_letter , unicode_letter)
      else:
       unicode_text = unicode_text + unicode_letter + postbase_letter + prebase_letter
      prebase_letter=""
      postbase_letter=""
     index = index + charNo
     break
    else:
     if charNo == 1:
      unicode_text = unicode_text + letter
      index = index + 1
      break
     unicode_letter = letter
  return unicode_text 

 def Ascii2Uni(self):
  if self.pdf :
   command = "pdftotext '" + self.input_filename +"'"
   process = os.popen(command, 'r')
   status = process.close()
   if status:
    print "The input file is a PDF file. To convert this the  pdftotext  utility is required. "
    print "This feature is available only for GNU/Linux Operating system."
    return 1 # Error - no pdftotext !
   else:
    self.input_filename =  os.path.splitext(self.input_filename)[0] + ".txt"
  if self.input_filename :
   ascii_file = codecs.open(self.input_filename, encoding = 'utf-8', errors = 'ignore')
  else :
   ascii_file = codecs.open(sys.stdin, encoding = 'utf-8', errors = 'ignore')   

  text = ""
  if self.output_filename :
   output_file = codecs.open(self.output_filename, encoding = 'utf-8', errors = 'ignore',  mode='w+')   

  while 1:
      text =ascii_file.readline()
   if text == "":
    break
   unicode_text = ""
   unicode_text = self.word2Unicode(text)

   if self.output_filename :
    output_file.write(unicode_text)
   else:
    print unicode_text.encode('utf-8')
  return 0

 def getVowelSign(self, vowel_letter, vowel_sign_letter):
  vowel=  vowel_letter.encode('utf-8')
  vowel_sign=  vowel_sign_letter.encode('utf-8')
  if vowel == "à´Ž":
   if vowel_sign == "െ":
    return "à´"
  if vowel == "à´’":
   if vowel_sign == "à´¾":
    return "à´“"
   if vowel_sign =="ൗ":
    return "à´”"
  return (vowel_letter+ vowel_sign_letter)

 def isPrebase(self, letter):
   unicode_letter = letter.encode('utf-8')
   if(   ( unicode_letter == "േ"  ) | (   unicode_letter ==  "ൈ" ) |   ( unicode_letter ==  "ൊ" )  | ( unicode_letter ==  "ോ"  ) |  ( unicode_letter == "ൌ"  )
      |  ( unicode_letter == "àµà´°"  )  |  ( unicode_letter == "െ"  ) 
       ):
   return True
   else:
   return False

 def isPostbase(self, letter):
  unicode_letter = letter.encode('utf-8')
  if ( (unicode_letter == "àµà´¯") | (unicode_letter == "àµà´µ") ):
   return True
  else:
   return False

 def LoadRules(self): 
  if(self.rulesDict):
   return self.rulesDict
  rules_dict = dict()
  line = []
  line_number = 0
  rules_file = codecs. open(self.mapping_filename,encoding='utf-8', errors='ignore')
  while 1:
   ''' Keep the line number. Required for error reporting'''
   line_number = line_number +1 
      text = unicode( rules_file.readline())
   if text == "":
         break
   '''Ignore the comments'''
   if text[0] == '#': 
         continue 
   line = text.strip()
   if(line == ""):
      continue 
   if(len(line.split("=")) != 2):
     print "Error: Syntax Error in the Ascii to Unicode Map in line number ",  line_number
       print "Line: "+ text
       return 2 # Error - Syntax error in Mapping file 
    lhs = line.split("=") [ 0 ]  
    rhs = line.split("=") [ 1 ]  
   if self.direction == 'a2u':
    rules_dict[lhs]=rhs
   else:
    rules_dict[rhs]=lhs
  return rules_dict

UPDATE: i ascii bölümü hakkında yanlış olmuştur düşünüyorum. Onun bir metin İngilizce olmayan yazı yazılmıştır. Ben unicode yazı dönüştürmek istediğiniz böylece onun düzgün gösterilir

0 Cevap