首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Devanagari教学大纲

Devanagari教学大纲
EN

Stack Overflow用户
提问于 2017-10-29 13:21:16
回答 2查看 560关注 0票数 5

我在试着把devanagari的单词

-> -> dharधर्मक्षेत्रेधर्मक्षेत्रेdharmakeshetre ->dhar mak

代码语言:javascript
复制
wd.split('्')

我得到的结果是:

代码语言:javascript
复制
['धर', 'मक', 'षेत', 'रे']

这部分是正确的

我试着用另一个词->कुरुक्षेत्रेkurukshetre -> ku

代码语言:javascript
复制
['कुरुक', 'षेत', 'रे']

结果显然是错误的。

如何有效地提取音节?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-03 06:01:13

如果你逐个看你的字符串

代码语言:javascript
复制
>>> data = "कुरुक्षेत्र"
>>> re.findall(".", data)
['क', 'ु', 'र', 'ु', 'क', '्', 'ष', 'े', 'त', '्', 'र']

还有你的另一根绳子

代码语言:javascript
复制
>>> data = "धर्मक्षेत्रे"
>>> re.findall(".", data)
['ध', 'र', '्', 'म', 'क', '्', 'ष', 'े', 'त', '्', 'र', 'े']

所以,您想要的可能是使用'् '्来分割它们。现在让我们称它们为符号字符。如果为第一个符号字符打印ord(data[2]),则为2381。现在,如果您在这个值周围探测

代码语言:javascript
复制
>>> 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 य़

我们最感兴趣的是23622391之间的值。所以我们创建了一个这样的值数组

代码语言:javascript
复制
>>> split = ""
>>> for i in range(2362, 2392):
...     split += chr(i)

接下来,我们要找到所有有或没有对应符号的图案。

代码语言:javascript
复制
>>> re.findall(".[" + split + "]?", "धर्मक्षेत्रे")
['ध', 'र्', 'म', 'क्', 'षे', 'त्', 'रे']
>>> re.findall(".[" + split + "]?", "कुरुक्षेत्र")
['कु', 'रु', 'क्', 'षे', 'त्', 'र']

这应该会让你接近你可能正在寻找的东西。如果您需要更复杂的处理,那么您将不得不使用@OphirYoktan发布的链接。

票数 2
EN

Stack Overflow用户

发布于 2017-11-05 15:56:41

看看unicodedata 模块

代码语言:javascript
复制
>>> import unicodedata
>>> word = 'कुरुक्षेत्र'

分配给每个字符的名称:

代码语言:javascript
复制
>>> 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

分配给每个字符的一般类别:

代码语言:javascript
复制
>>> for ch in word:
        print(unicodedata.category(ch))

    
Lo
Mn
Lo
Mn
Lo
Mn
Lo
Mn
Lo
Mn
Lo

FileFormat.info有一个Unicode字符类别列表。

看看这是否是你想要达到的目标:

代码语言:javascript
复制
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[0] == 'M':
            cluster = cluster + char        
        else:
            if cluster:
                yield cluster
            cluster = char
        end = char

    if cluster:
        yield cluster

测试功能:

代码语言:javascript
复制
>>> list(split_clusters('धर्मक्षेत्रे'))
['ध', 'र्म', 'क्षे', 'त्रे']
>>> list(split_clusters('कुरुक्षेत्र'))
['कु', 'रु', 'क्षे', 'त्र']
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47000655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档