функция замены синонимов строки php - PullRequest
0 голосов
/ 01 апреля 2012

Мне нужно прочитать из массива или из файла (желательно из файла, чтобы его было легко обновить), который содержит аббревиатуры и синонимы общих слов, и использовать его для поиска и замены в строке. Например, скажем, CBN означает «не может быть отрицательным». Мне нужно заменить "CBN король" на "Cannot Be Negated King". Как я могу сделать это в PHP?

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

Вы можете использовать INI-файл для хранения вашей таблицы перевода следующим образом (translate.ini):

CBN     = "cannot be negated"
TTYL    = "talk to you later"
.
.
.

Считать файл в массив следующим образом:

$translate = parse_ini_file( '/path/translate.ini' );

Заменить все сокращения их полными версиями:

$toTranslate = "This CBN but it's too late so TTYL";
$translated  = str_ireplace( array_keys( $translate ), array_values( $translate ), $toTranslate );

(Обратите внимание на использование, если str_ i replace (), чтобы избежать проблем с регистром).

1 голос
/ 01 апреля 2012

Если это не то, что вам нужно делать очень часто (или в режиме реального времени), простой вариант - сначала скомпилировать файл «словарь» (скажем, с разделителями табуляции, который содержит аббревиатуры и синонимы), а затем просто прочитать все содержимое его в хеш-таблицу, а затем запустите str_replace (ключ, значение) для каждого элемента в хеш-таблице для вашей исходной строки.

Обновление: вот как может выглядеть код:

$sourceString = 'My very long string full of acronyms like CBN';
$target = '';

//replace the following with file parsing routine
$myDict = array()
$myDict['CBN'] = 'Cannot Be Negated';
...
$myDict['PCBN'] = 'Probably Cannot Be Negated';
$myDict['MDCBN'] = 'Most Definitely Cannot Be Negated';

//replace acronyms with synonyms
foreach($myDict as $synonym=>$acronym)
    $target = str_replace($target, $acronym, $synonym)

Обновление 2:

// reading values from file:
$fp = fopen('dictionary.txt');

while (!eof($fp)) {
     $line = fgets($fp);

     $values = explode("/t", $line);

     //add to dictionary
     $myDict[$values[0]] = $values[1];
}

fclose($fp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...