Использование Python для поиска Syllables

Возможный дубликат:
Обнаружение слогов словом

Для пинков (и для улучшения моего Python) я пытаюсь создать алгоритм, который будет произвольно генерировать Haiku (японское стихотворение, состоящее из трех строк с 5, 7 и 5 слогов каждый).

Проблема, с которой я столкнулся, – найти количество слогов в слове (я использую en-US.dic от Ubuntu).

В настоящее время у меня есть скрипт, который пытается захватить число, указанное этим веб-сайтом, но это медленное и не создает много обращений. Это кажется более перспективным, но я не знаю, как использовать Python для ввода слова в текстовое поле.

Мой вопрос двоякий:

  • Существует ли алгоритмический способ определения количества слогов в слове (и, следовательно, не нужно делать тысячи веб-запросов)?
  • Могу ли я использовать Python для ввода слов в WordCalc?

Загрузите Moby Hyphenated Word List . У него есть большинство английских слов и имен, дефисных по слогу. Количество слогов будет числом дефисных маркеров + количество пробелов + количество фактических дефисов + 1.

Во второй части, если вы используете Chrome, щелкните правой кнопкой мыши по кнопке «Calculate Word Count» и выберите «Inspect Element». Вы увидите, что это POST sa form /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)