2017-10-29 44 views
5

Ben Devanagarca kelimeleriDevanagari

hecelere ayırmak çalışıyorum arasında Hecelerin

धर्मक्षेत्रे -> धर् मक् षेत् रे dharmakeshetre - Ben sonuç almak

wd.split('्') 

yeniden> dhar mak shet:

['धर', 'मक', 'षेत', 'रे'] 

Kısmen doğru olan

Bir kelime कुरुक्षेत्र deneyin -> कु रुक् षेत् रे kurukshetre -> ku ruk o

['कुरुक', 'षेत', 'रे'] 

tre sonuç besbelli yanlıştır.

Heceleri nasıl etkili bir şekilde ayırım? Eğer karakteri

>>> data = "कुरुक्षेत्र" 
>>> re.findall(".", data) 
['क', 'ु', 'र', 'ु', 'क', '्', 'ष', 'े', 'त', '्', 'र'] 

Ve diğer dize ile Dizeleriniz karakteri bakarsak

cevap

1

>>> data = "धर्मक्षेत्रे" 
>>> re.findall(".", data) 
['ध', 'र', '्', 'म', 'क', '्', 'ष', 'े', 'त', '्', 'र', 'े'] 

yüzden muhtemelen bu kullanarak '्'् bölünür sen ne istediğini. Şimdi onları notasyon karakterleri olarak adlandıralım. İlk gösterim karakteri için ord(data[2])'u yazdırırsanız, 2381 olur. Şimdi bu değere

>>> for i in range(2350, 2400): 
...  print(i, chr(i)) 
... 
2350 म 
2351 य 
2352 र 
2353 ऱ 
2354 ल 
2355 ळ 
2356 ऴ 
2357 व 
2358 श 
2359 ष 
2360 स 
2361 ह 
2362 ऺ 
2363 ऻ 
2364 ़ 
2365 ऽ 
2366 ा 
2367 ि 
2368 ी 
2369 ु 
2370 ू 
2371 ृ 
2372 ॄ 
2373 ॅ 
2374 ॆ 
2375 े 
2376 ै 
2377 ॉ 
2378 ॊ 
2379 ो 
2380 ौ 
2381 ् 
2382 ॎ 
2383 ॏ 
2384 ॐ 
2385 ॑ 
2386 ॒ 
2387 ॓ 
2388 ॔ 
2389 ॕ 
2390 ॖ 
2391 ॗ 
2392 क़ 
2393 ख़ 
2394 ग़ 
2395 ज़ 
2396 ड़ 
2397 ढ़ 
2398 फ़ 
2399 य़ 

etrafında soruşturma varsa biz 2362 ve 2391 arasındaki değerlerde çoğunlukla ilgileniyor. Bu yüzden

>>> split = "" 
>>> for i in range(2362, 2392): 
...  split += chr(i) 

Sonraki biz veya ilgili gösterim sembolü olmadan tüm desen bulmak istiyoruz tür değerlerin bir dizi oluşturmak.

>>> re.findall(".[" + split + "]?", "धर्मक्षेत्रे") 
['ध', 'र्', 'म', 'क्', 'षे', 'त्', 'रे'] 
>>> re.findall(".[" + split + "]?", "कुरुक्षेत्र") 
['कु', 'रु', 'क्', 'षे', 'त्', 'र'] 

Bu muhtemelen aradığınızı hayatına yakın almalısınız. Eğer daha karmaşık işleme gerekiyorsa o zaman @OphirYoktan dışarı

+0

Çok teşekkürler:

import unicodedata def split_clusters(txt): """ Generate grapheme clusters for the Devanagari text.""" stop = '्' cluster = u'' end = None for char in txt: category = unicodedata.category(char) if (category == 'Lo' and end == stop) or category == 'Mn': cluster = cluster + char else: if cluster: yield cluster cluster = char end = char if cluster: yield cluster 

Test fonksiyonu: Bu ulaşmak istediğiniz buysa

bakınız. Buradan alabilirim –

0

Kontrol unicodedatamodule haberi bağlantı ile gitmek zorunda kalacaktır. her karakter için atanan

>>> import unicodedata 
>>> word = 'कुरुक्षेत्र' 

İsimler: her karakter için atanan

>>> for ch in word: 
     print(unicodedata.name(ch)) 


DEVANAGARI LETTER KA 
DEVANAGARI VOWEL SIGN U 
DEVANAGARI LETTER RA 
DEVANAGARI VOWEL SIGN U 
DEVANAGARI LETTER KA 
DEVANAGARI SIGN VIRAMA 
DEVANAGARI LETTER SSA 
DEVANAGARI VOWEL SIGN E 
DEVANAGARI LETTER TA 
DEVANAGARI SIGN VIRAMA 
DEVANAGARI LETTER RA 

Genel kategori:

>>> for ch in word: 
     print(unicodedata.category(ch)) 


Lo 
Mn 
Lo 
Mn 
Lo 
Mn 
Lo 
Mn 
Lo 
Mn 
Lo 

FileFormat.info Unicode karakter kategorilerinin bir listesi vardır.

>>> list(split_clusters('धर्मक्षेत्रे')) 
['ध', 'र्म', 'क्षे', 'त्रे'] 
>>> list(split_clusters('कुरुक्षेत्र')) 
['कु', 'रु', 'क्षे', 'त्र']