2

可能重复:
检测单词中的音节

为了踢球(并重温我的 Python),我正在尝试创建一个算法,该算法将随机生成俳句(日本诗歌由三行组成,每行有 5、7 和 5 个音节)。

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

目前,我正在运行一个脚本,试图获取该网站报告的数字,但这很慢,并且没有产生很多点击。 似乎更有希望,但我不知道如何使用 Python 将单词注入他们的文本框中。

我的问题有两个:

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

2 回答 2

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)
于 2012-05-02T14:20:42.283 回答
3

下载Moby 连字符单词表。它的大多数英文单词和名称都以音节连字符。音节的数量将是连字符标记的数量 + 空格的数量 + 实际连字符的数量 + 1。

于 2012-05-02T14:40:23.050 回答