単語の音節の数を取得するにはどうすればよいですか?


8

私はすでに通過したこのポストた用途nltkcmudict言葉に音節の数をカウントします:

from nltk.corpus import cmudict
d = cmudict.dict()
def nsyl(word):
  return [len(list(y for y in x if y[-1].isdigit())) for x in d[word.lower()]] 

ただし、名前などのcmuの辞書外の単語の場合Rohit、結果は返されません。

それで、単語の音節を数える他の/より良い方法はありますか?


1
さて、wordcalc.comは "Rohit"を処理できるので、可能であるようです。でもどうやってるかわからない。。。そしてそれは完璧ではありません。
Neil Slater

wordcalc.comは「音節」に1のカウントを与えました(私はそれを3と呼びます)。リンクされた質問のハイフネーションルールを使用している可能性があります。これらは多くの場合、顕著な音節と一致しているようですが、100%ではありません。
Neil Slater

回答:


10

Pyphenと呼ばれる別のPythonライブラリを試すことができます。それは使いやすく、多くの言語をサポートしています。

import pyphen
dic = pyphen.Pyphen(lang='en')
print dic.inserted('Rohit')
>>'Ro-hit'

これはかなり便利ですが、多くの誤った結果をもたらします。たとえば、「readier」は3ではなく2音節としてカウントされ、「karate」は3ではなく1としてカウントされ、「insouciance」は4ではなく3としてカウントされ、「Siberia」は4ではなく1としてカウントされます。
Hayze

4

私はまったく同じ問題に直面していました、これは私がやった
ことです:以下のように単語がcmuの辞書に見つからないときに発生する主要なエラーをキャッチします:

from nltk.corpus import cmudict
d = cmudict.dict()

def nsyl(word):
    try:
        return [len(list(y for y in x if y[-1].isdigit())) for x in d[word.lower()]]
    except KeyError:
        #if word not found in cmudict
        return syllables(word)

以下の音節関数を呼び出す

def syllables(word):
    #referred from stackoverflow.com/questions/14541303/count-the-number-of-syllables-in-a-word
    count = 0
    vowels = 'aeiouy'
    word = word.lower()
    if word[0] in vowels:
        count +=1
    for index in range(1,len(word)):
        if word[index] in vowels and word[index-1] not in vowels:
            count +=1
    if word.endswith('e'):
        count -= 1
    if word.endswith('le'):
        count += 1
    if count == 0:
        count += 1
    return count
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.