OverviewFilesCommitsIssuesDocsReleasesPeers

opencog-link-grammar / morphology / fa / scripts / win1256_2_roman_1-5.pl

135 lines · pl ref:
#! /usr/bin/perl
# Created by Jon Dehdari 2002
# Perl 5.6
# Converts Arabic Windows 1256 text to Romanized Arabic/Farsi text (my customized Romanization scheme)
# To Do:


%win1256_2roman = ( 	
		"\xb0" => '0', # EXTENDED ARABIC-INDIC DIGIT ZERO # Farsi specific
		"\xb1" => '1', # EXTENDED ARABIC-INDIC DIGIT ONE # Farsi specific
		"\xb2" => '2', # EXTENDED ARABIC-INDIC DIGIT TWO # Farsi specific
		"\xb3" => '3', # EXTENDED ARABIC-INDIC DIGIT THREE # Farsi specific
		"\xb4" => '4', # EXTENDED ARABIC-INDIC DIGIT FOUR # Farsi specific
		"\xb5" => '5', # EXTENDED ARABIC-INDIC DIGIT FIVE # Farsi specific
		"\xb6" => '6', # EXTENDED ARABIC-INDIC DIGIT SIX # Farsi specific
		"\xb7" => '7', # EXTENDED ARABIC-INDIC DIGIT SEVEN # Farsi specific
		"\xb8" => '8', # EXTENDED ARABIC-INDIC DIGIT EIGHT # Farsi specific
		"\xb9" => '9', # EXTENDED ARABIC-INDIC DIGIT NINE # Farsi specific
		
		"\xc7" => 'A', # ARABIC LETTER ALEF
		"\xff" => '|', # ARABIC LETTER ALEF #initial position; fake hex value for now
		"\xc8" => 'b', # ARABIC LETTER BEH
		"\xc9" => 'a', # ARABIC LETTER TEH MARBUTA # temporary, for arabic
		"\x81" => 'p', # ARABIC LETTER PEH # Farsi specific
		"\xca" => 't', # ARABIC LETTER TEH
		"\xcb" => 'V', # ARABIC LETTER THEH
		"\xcc" => 'j', # ARABIC LETTER JEEM
		"\x8d" => 'c', # ARABIC LETTER TCHEH # Farsi specific
		"\xcd" => 'H', # ARABIC LETTER HAH
		"\xce" => 'x', # ARABIC LETTER KHAH
		"\xcf" => 'd', # ARABIC LETTER DAL
		"\xd0" => 'L', # ARABIC LETTER THAL
		"\xd1" => 'r', # ARABIC LETTER REH
		"\xd2" => 'z', # ARABIC LETTER ZAIN
		"\x8e" => 'J', # ARABIC LETTER JEH # Farsi specific
		"\xd3" => 's', # ARABIC LETTER SEEN
		"\xd4" => 'C', # ARABIC LETTER SHEEN
		"\xd5" => 'S', # ARABIC LETTER SAD
		"\xd6" => 'D', # ARABIC LETTER DAD
		"\xd8" => 'T', # ARABIC LETTER TAH
		"\xd9" => 'Z', # ARABIC LETTER ZAH
		"\xda" => 'E', # ARABIC LETTER AIN
		"\xdb" => 'G', # ARABIC LETTER GHAIN
		"\xdd" => 'f', # ARABIC LETTER FEH
		"\xde" => 'q', # ARABIC LETTER QAF
		"\xdf" => 'k', # ARABIC LETTER KAF
		"\x98" => 'k', # ARABIC LETTER KEHEH # Farsi specific
		"\x90" => 'g', # ARABIC LETTER GAF # Farsi specific
		"\xe1" => 'l', # ARABIC LETTER LAM
		"\xe3" => 'm', # ARABIC LETTER MEEM
		"\xe4" => 'n', # ARABIC LETTER NOON
		"\xe6" => 'u', # ARABIC LETTER WAW #note "u", "v", and "w" are all "vav"s in Farsi orthography.
		"\xe5" => 'h', # ARABIC LETTER HEH
		"\xed" => 'i', # ARABIC LETTER YEH #note "i" and  "y" are both "ya"s in Farsi orthography.
		"\xec" => 'A', # ARABIC LETTER ALEF MAKSURA # temp
		"\xf3" => 'a', # ARABIC FATHA #note the short vowels "a", "o" and "e" do not normally appear in Farsi orthography.
		"\xf5" => 'o', # ARABIC DAMMA
		"\xf6" => 'e', # ARABIC KASRA
		
		"\xc2" => ']', # ARABIC LETTER ALEF WITH MADDA ABOVE
		"\xc1" => 'M', # ARABIC LETTER HAMZA
		"\xf0" => 'N', # ARABIC FATHATAN (TANVIN)
		"\xc3" => '|', # ARABIC LETTER ALEF WITH HAMZA ABOVE # temp
		"\xc4" => 'U', # ARABIC LETTER WAW WITH HAMZA ABOVE
		"\xc5" => '|', # ARABIC LETTER ALEF WITH HAMZA BELOW # temp
		"\xc6" => 'I', # ARABIC LETTER YEH WITH HAMZA ABOVE
		"\xc0" => 'X', # ARABIC LETTER HEH WITH YEH ABOVE
		"\xa5" => '%', # ARABIC PERCENT SIGN	
		"\xa1" => ',', # ARABIC COMMA
		"\xba" => ';', # ARABIC SEMICOLON
		"\xbf" => '?', # ARABIC QUESTION MARK
		
		"\xa0" => ' ', # NO-BREAK SPACE
		"\x20" => ' ', # SPACE
		"\xa8" => '(', # LEFT PARENTHESIS
		"\xa9" => ')', # RIGHT PARENTHESIS
		#"\xad" => '-', # HYPHEN-MINUS
		#"\xa6" => '.', # FULL STOP
		"\x5b" => '{', # LEFT SQUARE BRACKET	
		"\x5d" => '}', # RIGHT SQUARE BRACKET	
		"\xab" => '{', # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
		"\xbb" => '}', # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK  
		"\x2e" => '.', # FULL STOP
		"\xba" => ':', # COLON
		"\x0a" => "\n", # LINE FEED
		"\x9d" => '-', # ZERO WIDTH NON-JOINER

		"0" => '0', # DIGIT ZERO
		"1" => '1', # DIGIT ONE
		"2" => '2', # DIGIT TWO
		"3" => '3', # DIGIT THREE
		"4" => '4', # DIGIT FOUR
		"5" => '5', # DIGIT FIVE
		"6" => '6', # DIGIT SIX
		"7" => '7', # DIGIT SEVEN
		"8" => '8', # DIGIT EIGHT
		"9" => '9', # DIGIT NINE


	);

my $in = shift || die "Provide a valid input file argument\n";
#$out= shift || die "Provide a valid output file argument\n";
$in ne $out || die "Input and output files cannot be the same\n";
open(IN,$in);
#open(OUT,">$out");


### Temporary, for testing purposes
$in =~ s/\./_/g;
print STDOUT "\#__$in\n";

while (my $line = <IN>) {
	$line =~ s/([^\x81-\xff])\xc7/$1\xff/g; # Converts a regular alef into a basic placeholder alef, to be used with the authors romanization scheme eg. Au -> |u .

	$line =~ s/<br>/\n/g;
	$line =~ s/<p>/\n/g;
	$line =~ s/<\/td>/\n/g;
	$line =~ s/<\/div>/\n/g;
	$line =~ s/<.*?>//g; # Deletes all HTML tags on 1 line
	$line =~ s/<.*?//g;  # Deleses 1st part of line-spanning HTML tags
	$line =~ s/.*?>//g;  # Deletes 2nd part of line-spanning HTML tags
	
	my @charx = split //, $line;
	foreach my $charx (@charx)
	   { my $newchar = $win1256_2roman{$charx}; 
		print STDOUT ($newchar);
		#print OUT ($newchar);

	   }
	}

close (IN);
#close (OUT);