|
Package ghalatawi ::
Module ar_ghalat
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 """
25 Ghalatawi: Arabic AutoCorrection module
26 @author: Taha Zerrouki
27 @contact: taha dot zerrouki at gmail dot com
28 @copyright: Arabtechies, Arabeyes, Taha Zerrouki
29 @license: GPL
30 @date:2011/01/05
31 @version: 0.2
32 """
33 import re
34 import pyarabic.araby as araby
35 """
36 @var ArabicAutocorrectWordlist: Common error on stop words.
37 @var ReplacementTable: Table of regular expression to be treated.
38 """
39 ArabicAutocorrectWordlist={
40
41 u'اذا':u'إذا',
42 u'او':u'أو',
43 u'فى':u'في',
44 u'هى':u'هي',
45 u'انت':u'أنت',
46 u'انتما':u'أنتما',
47 u'الى':u'إلى',
48 u'التى':u'التي',
49 u'الذى':u'الذي',
50 }
51
52
53
54 ReplacementTable=[
55
56
57
58 (re.compile(ur'\b(و|ف|)(ك|ب|)(ال|)إن(\w\w)ا(\w)(ي|)(ين|ات|ة|تين|)\b',re.UNICODE), ur'\1\2\3ان\4ا\5\6\7'),
59 (re.compile(ur'\b(و|ف|)(لل|)إن(\w\w)ا(\w)(ي|)(ين|ات|تين|ة|)\b',re.UNICODE), ur'\1\2ان\3ا\4\5\6'),
60 (re.compile(ur'\b(و|ف|)(ك|ب|ل|)إن(\w\w)ا(\w)(ي|)(هما|كما|هم|كم|هن|كن|نا|ه|ك|ها|تهما|تكما|تهم|تكم|تهن|تكن|تنا|ته|تها|تك|اتهما|اتكما|اتهم|اتكم|اتهن|اتكن|اتنا|اته|اتها|اتك|)\b',re.UNICODE), ur'\1\2ان\3ا\4\5\6'),
61 (re.compile(ur'\b(و|ف|)(ال|)إن(\w\w)ا(\w)(ي|)(ين|ان|تين|تان|ون|)\b',re.UNICODE), ur'\1\2ان\3ا\4\5\6'),
62 (re.compile(ur'\b(و|ف|)إن(\w\w)ا(\w)(ي|)(ًا|اً|ا|)\b',re.UNICODE), ur'\1ان\2ا\3\4\5'),
63
64 (re.compile(ur'\b(و|ف|)(ك|ب|)(ال|)إ(\w)ت(\w)ا(\w)(ي|)(ين|ات|ة|تين|)\b',re.UNICODE), ur'\1\2\3ا\4ت\5ا\6\7\8'),
65 (re.compile(ur'\b(و|ف|)(لل|)إ(\w)ت(\w)ا(\w)(ي|)(ين|ات|تين|ة|)\b',re.UNICODE), ur'\1\2ا\3ت\4ا\5\6\7'),
66 (re.compile(ur'\b(و|ف|)(ك|ب|ل|)إ(\w)ت(\w)ا(\w)(ي|)(هما|كما|هم|كم|هن|كن|نا|ه|ك|ها|تهما|تكما|تهم|تكم|تهن|تكن|تنا|ته|تها|تك|اتهما|اتكما|اتهم|اتكم|اتهن|اتكن|اتنا|اته|اتها|اتك|)\b',re.UNICODE), ur'\1\2ا\3ت\4ا\5\6\7'),
67 (re.compile(ur'\b(و|ف|)(ال|)إ(\w)ت(\w)ا(\w)(ي|)(ين|ان|تين|تان|ون|)\b',re.UNICODE), ur'\1\2ا\3ت\4ا\5\6\7'),
68 (re.compile(ur'\b(و|ف|)إ(\w)ت(\w)ا(\w)(ي|)(ًا|اً|ا|)\b',re.UNICODE), ur'\1ا\2ت\3ا\4\5\6'),
69
70 (re.compile(ur'\b(و|ف|)(ك|ب|)(ال|)إ(زد|ضط|صط)(\w)ا(\w)(ي|)(ين|ات|ة|تين|)\b',re.UNICODE), ur'\1\2\3ا\4\5ا\6\7\8'),
71 (re.compile(ur'\b(و|ف|)(لل|)إ(ﺯﺩ|ﺾﻃ|ﺺﻃ)(\w)ا(\w)(ي|)(ين|ات|تين|ة|)\b',re.UNICODE), ur'\1\2ا\3\4ا\5\6\7'),
72 (re.compile(ur'\b(و|ف|)(ك|ب|ل|)إ(ﺯﺩ|ﺾﻃ|ﺺﻃ)(\w)ا(\w)(ي|)(هما|كما|هم|كم|هن|كن|نا|ه|ك|ها|تهما|تكما|تهم|تكم|تهن|تكن|تنا|ته|تها|تك|اتهما|اتكما|اتهم|اتكم|اتهن|اتكن|اتنا|اته|اتها|اتك|)\b',re.UNICODE), ur'\1\2ا\3\4ا\5\6\7'),
73 (re.compile(ur'\b(و|ف|)(ال|)إ(ﺯﺩ|ﺾﻃ|ﺺﻃ)(\w)ا(\w)(ي|)(ين|ان|تين|تان|ون|)\b',re.UNICODE), ur'\1\2ا\3\4ا\5\6\7'),
74 (re.compile(ur'\b(و|ف|)إ(ﺯﺩ|ﺾﻃ|ﺺﻃ)(\w)ا(\w)(ي|)(ًا|اً|ا|)\b',re.UNICODE), ur'\1ا\2\3ا\4\5\6'),
75
76 (re.compile(ur'ىء\b',re.UNICODE), ur'ئ'),
77
78 (re.compile(ur'ى([^ء]+)\b',re.UNICODE), ur'ى \1'),
79
80 (re.compile(ur'ة(\w+)\b',re.UNICODE), ur'ة \1'),
81
82
83
84
85
86 ]
87
89 """ Checks for a valid Arabic word.
90 An Arabic word not contains spaces, digits and pounctuation
91 avoid some spelling error, TEH_MARBUTA must be at the end.
92 @param word: input word
93 @type word: unicode
94 @return: True if all charaters are in Arabic block
95 @rtype: Boolean
96 """
97 return araby.isArabicword(word);
98
100 """
101 Autocorrect by using regular expression from remplacement table.
102
103 Example:
104 >>> word=u"الإجتماعية"
105 >>> autocorrectByRegex(word)
106 الاجتماعية
107
108 @param word: the input word.
109 @type word: unicode.
110 @return: corrected word, if the word is common error, or False.
111 @rtype: unicode or False.
112 """
113
114 word=araby.stripTatweel(word);
115 word_nm=araby.stripTashkeel(word)
116 for rule in ReplacementTable:
117
118
119 result=rule[0].sub(rule[1],word_nm);
120
121 if result!=word_nm:
122 return result;
123
124 return False;
126 """
127 Autocorrect by using word list.
128 the default list is ArabicAutocorrectWordlist.
129
130 Example:
131 >>> autocorrectlist={
132 u'اذا':u'إذا',
133 u'او':u'أو',
134 u'فى':u'في',
135 u'هى':u'هي',
136 u'انت':u'أنت',
137 u'انتما':u'أنتما',
138 u'الى':u'إلى',
139 u'التى':u'التي',
140 u'الذى':u'الذي',
141 }
142 >>> word=u"اذا"
143 >>> autocorrectByWordlist(word, autocorrectlist)
144 إذا
145
146 @param word: the input word.
147 @type word: unicode.
148 @return: corrected word, if the word is common error, or False.
149 @rtype: unicode or False.
150 """
151
152
153 word=araby.stripTatweel(word);
154 word_nm=araby.stripTashkeel(word)
155 if ArabicAutocorrectWordlist.has_key(word):
156 return ArabicAutocorrectWordlist[word];
157 else:
158 return False;
160 """
161 Load Autocorrect list from a file, to the global list autocorrect_arabic_list.
162
163 Example:
164 >>> autocorrectlist=loadAutocorrectWordlistFromFile("data/arabic.acl")
165 >>> word=u"اذا"
166 >>> autocorrectByWordlist(word, autocorrectlist)
167 إذا
168
169 @param myfile: the input word.
170 @type myfile: unicode.
171 @return: wordlist, if loaded, else False.
172 @rtype: Boolean.
173 """
174
175 try:
176 fl=open(myfile);
177 except:
178
179 return False;
180 line=fl.readline().decode("utf8");
181 nb_field=2;
182 dWordlist={}
183 while line :
184 line=line.strip("\n");
185 if not line.startswith("#"):
186 liste=line.split("\t");
187 if len(liste)>=nb_field:
188
189
190 dWordlist[liste[0]]=liste[1];
191 line=fl.readline().decode("utf8");
192 fl.close();
193 return dWordlist;
194