使用Python查找音节

时间:2012-05-02 13:39:36

标签: python algorithm

  

可能重复:
  Detecting syllables in a word

对于踢(并刷新我的Python),我正在尝试创建一个算法,随机生成一个Haiku(日语诗由三行组成,每行有5,7和5个音节)。

我遇到的问题是找到一个单词中的音节数(我使用的是来自Ubuntu的en-US.dic)。

目前,我有一个运行的脚本试图获取this web site,报告的数字,但这很慢,并且没有产生很多命中。 This似乎更有希望,但我不知道如何使用Python在文本框中注入一个单词。

我的问题是双重的:

  • 是否有一种算法来确定单词中的音节数(因此,不需要发出数千个网络请求)?
  • 我可以使用Python将单词注入WordCalc吗?

2 个答案:

答案 0 :(得分:3)

对于第二部分,如果您使用Chrome,请右键单击"计算字数"按钮并选择"检查元素"。您会看到POST/index.php的一个表单,其中包含一些相关内容:

name="text"
name="optionSyllableCount"
name="optionWordCount"

(后两个是输入复选框,通常需要POST值)。

import urllib

url = 'http://www.wordcalc.com/index.php'
post_data = urllib.urlencode(
    {'text': 'virgina'})
post_data = '%s&optionSyllableCount&optionWordCount' % post_data

cnxn = urllib.urlopen(url, post_data)
response = cnxn.read()
cnxn.close()

如果您想解析回复,请:

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(response)
h3_matches = [h3 for h3 in soup.findAll('h3') if h3.text == 'Statistics']
if len(h3_matches) != 1:
  raise Exception('Wrong number of <h3>Statistics</h3>')
h3_match = h3_matches[0]
table = h3_match.findNextSibling('table')

td_matches = [td for td in table.findAll('td')
              if td.text == 'Syllable Count']
if len(td_matches) != 1:
  raise Exception('Wrong number of <td>Syllable Count</td>')
td_match = td_matches[0]

td_value = td_match.findNextSibling('td')
syllable_count = int(td_value.text)

答案 1 :(得分:3)

下载Moby Hyphenated Word List。它有大多数英文单词和名称用音节连字。音节数量是连字符标记的数量+空格数+实际连字符数+ 1。