衡量一个字的pronounceability?(Measure the pronounceabili

2019-06-26 20:48发布

我有一个域名取景器修修补补,并希望青睐那些琅琅上口的话。

例如:nameoic.com(坏)与namelet.com(好)。

想一些与同音做可能是合适的,但它并不像我可以用它们来生产某种比较得分。

为胜利PHP代码。

Answer 1:

这是应该最常用字的工作函数...这应该给你1之间的一个很好的结果(根据规则完美pronounceability)为0。

下面的功能远非完美(它确实不是很喜欢像海啸字[0.857])。 但它应该是很容易调整您的需求。

<?php
// Score: 1
echo pronounceability('namelet') . "\n";

// Score: 0.71428571428571
echo pronounceability('nameoic') . "\n";

function pronounceability($word) {
    static $vowels = array
        (
        'a',
        'e',
        'i',
        'o',
        'u',
        'y'
        );

    static $composites = array
        (
        'mm',
        'll',
        'th',
        'ing'
        );

    if (!is_string($word)) return false;

    // Remove non letters and put in lowercase
    $word = preg_replace('/[^a-z]/i', '', $word);
    $word = strtolower($word);

    // Special case
    if ($word == 'a') return 1;

    $len = strlen($word);

    // Let's not parse an empty string
    if ($len == 0) return 0;

    $score = 0;
    $pos = 0;

    while ($pos < $len) {
        // Check if is allowed composites
        foreach ($composites as $comp) {
            $complen = strlen($comp);

            if (($pos + $complen) < $len) {
                $check = substr($word, $pos, $complen);

                if ($check == $comp) {
                    $score += $complen;
                    $pos += $complen;
                    continue 2;
                }
            }
        }

        // Is it a vowel? If so, check if previous wasn't a vowel too.
        if (in_array($word[$pos], $vowels)) {
            if (($pos - 1) >= 0 && !in_array($word[$pos - 1], $vowels)) {
                $score += 1;
                $pos += 1;
                continue;
            }
        } else { // Not a vowel, check if next one is, or if is end of word
            if (($pos + 1) < $len && in_array($word[$pos + 1], $vowels)) {
                $score += 2;
                $pos += 2;
                continue;
            } elseif (($pos + 1) == $len) {
                $score += 1;
                break;
            }
        }

        $pos += 1;
    }

    return $score / $len;
}


Answer 2:

我认为这个问题可以归结为解析字转换成候选集的音素 ,然后使用音素对预定表,确定单词怎么pronouncible是。

例如: “技能” 是音素 “/ S / K / I / L /。” “/ S / K /”, “/ K / I /”, “/ I / L /” 都应该有高分pronouncibility的,所以这个词应该高度得分。

“skpit” 音素是 “/ S / K / P / I / T /”。 “/ K / P /”应具有低pronouncibility得分,所以这个词应该得分低。



Answer 3:

使用马尔可夫模型(上字母,没有的话,当然)。 一个字的概率是为了便于发音的一个很好的代表。 你必须归一长度,因为较长的单词本身不太可能。



文章来源: Measure the pronounceability of a word?