コードは次のとおりです。
BanglaAlphabet = {
'Consonant' : '[\u0995-\u09B9\u09CE\u09DC-\u09DF]',
'IndependantVowel' : '[\u0985-\u0994]',
'DependantVowel' : '[\u09BE-\u09CC\u09D7]',
'Nukta' : '[\u09BC]'
}
BanglaWordPattern = ur"""(
({DependantVowel}{Nukta}{Consonant}) |
({DependantVowel}{Consonant}) |
{IndependantVowel} |
{Consonant} |
)+""".format(**BanglaAlphabet)
BanglaWordPattern = re.compile(BanglaWordPattern, re.VERBOSE)
マッチングは以下で行われます:
re.match(BanglaWordPattern, w[::-1])
これは、右から左に一致する場合に有効なベンガル語に一致することを意味します。
ただし、োগাড় や িদগ などの無効な単語に一致しています。
何が問題なのですか?
編集
@GarethRees と @ChrisMorgan によって提案された多数の修正の後、最終的には次のようになりました。
bangla_alphabet = dict(
consonant = u'[\u0995-\u09b9\u09ce\u09dc-\u09df]',
independent_vowel = u'[\u0985-\u0994]',
dependent_vowel = u'[\u09be-\u09cc\u09d7]',
dependent_sign = u'[\u0981-\u0983\u09cd]',
virama = u'[\u09cd]'
)
bangla_word_pattern = re.compile(ur'''(?:
{consonant}
({virama}{consonant})?
({virama}{consonant})?
{dependent_vowel}?
{dependent_sign}?
|
{independent_vowel}
{dependent_sign}?
)+
マッチングは次のとおりです。
bangla_word_pattern.match(w)
このコードは、エラーを修正するだけでなく、以前よりも多くの文字と有効な構造を考慮しています。
期待どおりに機能していることを報告できてうれしいです。そのため、このコードは現在、ベンガル語の構文を検証するための非常に基本的な正規表現として機能しています。
実装されていない特別なルール/例外がいくつかあります。それらを調べて、この基本構造に徐々に追加していきます。
多くの ''.format(**bangla_alphabet), re.VERBOSE)
マッチングは次のとおりです。
xCodexBlockxPlacexHolderx
このコードは、エラーを修正するだけでなく、以前よりも多くの文字と有効な構造を考慮しています。
期待どおりに機能していることを報告できてうれしいです。そのため、このコードは現在、ベンガル語の構文を検証するための非常に基本的な正規表現として機能しています。
実装されていない特別なルール/例外がいくつかあります。それらを調べて、この基本構造に徐々に追加していきます。