PHP preg_match или str_replace, чтобы найти соответствующие синонимы - PullRequest
0 голосов
/ 28 января 2012

У меня есть массив переменных print_r:

$ синонимы =

массив (

[0] => a company|an organization|a business
[1] => auto|automobile|car|vehicle
[2] => aware|conscious|mindful|informed|knowledgeable
[3] => aware of|conscious of|mindful of
[4] => be aware|bear in mind|remember
[5] => be aware of|concentrate on|pay attention to|know about|be familiar with
[6] => carefully|cautiously|meticulously|very carefully|thoroughly|properly
[7] => cases|instances|circumstances|situations|scenarios|conditions
[8] => comes|arrives|will come|happens
[9] => company|business|organization|firm|corporation|provider
[10] => coverage|protection
[11] => in most|in many
[12] => in most cases|generally|usually|normally|typically|most often
[13] => in the|within the|inside the|while in the|from the|during the
[14] => increases|raises|will increase|boosts|improves
[15] => information|info|data|details|facts|information and facts
[16] => insurance|insurance coverage|insurance policy|insurance plan|insurance policies
[17] => on the|around the|within the|to the|about the|over the
[18] => once|as soon as|when|after|the moment|at the time
[19] => once you|when you|as soon as you|after you|when you finally
[20] => or a|or perhaps a|or possibly a|or even a|or maybe a|or simply a
[21] => package|package deal|bundle|deal|offer
[22] => payment|fee|cost
[23] => policy|coverage|plan
[24] => premium|top quality|high quality
[25] => question|query|concern|issue|problem
[26] => rates|prices|charges|premiums|costs|fees
[27] => receive|get|obtain|acquire|be given
[28] => receive a|get a
[29] => representative|consultant
[30] => review|evaluation|assessment|critique|overview|evaluate
[31] => the new|the brand new|the newest|the modern
[32] => time to|time for you to
[33] => with your|together with your|along with your|with the
[34] => you have|you've|you've got|you might have|you may have|you have got

);

А вот и мое предложение =

$ фразе = "Когда придет время продлевать ваш полис автострахования, будьте в курсе того, как ваш перевозчик обрабатывает продления. В большинстве случаев вы получаете по почте пакет обновления с новым полисом и тарифы. Внимательно изучите эту информацию и задайте вопрос об увеличении страховых взносов своему агенту или представителю компании. В большинстве случаев, когда вы отправляете платеж по новой политике, вы возобновляете покрытие. ";

Вот мой пример кода для замены соответствующими синонимами для стандартных программ перезаписи:

$searches =  array();

for ($i=0; $i < count($synonyms); $i++) {
   $words = explode("|", $synonyms[$i], 3);
   $searches[$i] = $words[0];
   $replaces[$i] = $synonyms[$i];
}

function cmp($a,$b) {
   if ($a == $b) return 0;
   if (strpos($a, $b) !== false) return -1;
   if (strpos($b, $a) !== false) return 1;
   return 0;
}

uasort($searches, 'cmp');

$replaces_new = array();

$i=0;

foreach ($searches as $k=>$v) {
   $replaces_new[$i] = "{{$replaces[$k]}}";
   $i++;
}

$output = str_replace($searches, $replaces_new, $output);

echo $output;

## This code was modified from here :
## /5415257/php-pregmatch-chtoby-naiti-sootvetstvuyschee-slovo

Я получил такой вывод:

Когда он {прибывает | прибывает | придет | случится} {время для вас} обновить ваш {авто | автомобиль | автомобиль | транспортное средство} {страхование | страхование {покрытие | защита} | страховой полис | план страхования | страховые полисы} {полис | {охват | защита} | план}, {{быть {осведомлен | осведомлен | внимателен | информирован | осведомлен} | иметь в виду | помнить | о | сосредоточиться на | обратить внимание на | знать о | быть знакомым с} как ваш оператор обрабатывает продления. В большинстве {случаев | случаев | обстоятельств | ситуаций | сценариев | условий} вы {{получаете | получаете | получаете | получаете | получаете | даётся}} | получаете {продление} {пакет | пакет сделка | пакет | сделка | предложение} {в | внутри | внутри | в то время как | из | во время} почты {с вашим | вместе с вашим | вместе с вашим | с} новым {политикой | {охват | защита} | планом} и {ставками | цены | стоимость | премия | расходы | сборы}. Просмотрите эту {информацию | информацию | данные | подробности | факты | информацию и факты} {осторожно | осторожно | тщательно | очень тщательно | тщательно | должным образом} и {вопрос | запрос | c {один раз | как только | когда | после | после | момент | во время} rn | проблема | проблема} любые {увеличивает | поднимает | увеличит | повышает | улучшает} {премиум | высокое качество | высокое качество} {с вашим | вместе с вашим | вместе с вашим | с } агент {или a | или, возможно, | или, возможно, | или даже |, или, может быть, | или просто} {компания | бизнес | организация | фирма | корпорация | поставщик} {представитель | консультант}. В большинстве {случаев | случаев | обстоятельств | ситуаций | сценариев | условий} {{один раз | как только | когда | после | момента | в то время} вы | когда вы | как только вы | после вас | когда вы окончательно} отправить {оплата | плата | стоимость} на {новый | совершенно новый | самый новый | современный} {полис | {охват | защита} | план}, {у вас | у вас | у вас есть | у вас может быть | у вас может быть | у вас есть} продлен ваш {охват | защита}.

и вот что мне нужно:

$ output = "Когда он {приходит | прибывает | придет | случится} {время | время для вас} продлить {auto | автомобиль | автомобиль | автомобиль} {страхование | страховое покрытие | страховой полис | план страхования| страховые полисы} {полис | покрытие | план}, {знать о | сосредоточиться на | обратить внимание на | знать о | быть знакомым с} как ваш оператор обрабатывает продления. {В большинстве случаев | Обычно |Обычно | Обычно | Как правило | Как правило}, вы {получаете | получите | получить} обновление {пакет | пакетное предложение | пакетное предложение | предложение | {} в | внутри | внутри | в то время как в | из | во время} отправить по почте {с вашим | вместе с вашим | вместе с вашим | с} новым {политикой | покрытием | планом} и {ставками | ценами | расходами | премиями | расходами | комиссионными}. {Обзор | Оценка | Оценка | Критика | Обзор| Оценивать} эту {информацию | информацию | данные | подробности | факты | информацию и факты} {осторожно | осторожно | тщательно | очень тщательно | тщательно | правильно}, а также {вопрос | запрос | проблема | проблема | проблема} любой {увеличивает |поднимает | будет увеличивать | повышает | улучшает} в {premium | top quality | high quality} {с вашим | вместе с вашим | вместе с вашим | с агентом} {или a | или, возможно, | или, возможно, | или даже | или, может быть, | или просто} {company | business |организация | фирма | корпорация | поставщик} {представитель | консультант}.{В большинстве случаев | Обычно | Обычно | Обычно | Как правило | Наиболее часто}, {один раз вы | когда вы | как только вы | после вас | когда вы наконец} представите {оплата | плата | стоимость} {на | вокруг| в пределах | до | о | сверх} нового {полиса | страхового покрытия | плана}, {у вас есть | у вас | у вас есть | у вас может быть | у вас может быть | у вас есть] продлено ваше{охват | защита}. "

Примечание:" знать о"будет заменено на" {знать о | сосредоточиться на | обратить внимание на | знать о | бытьзнакомы с}"вместо других слов, таких как« осознавать »,« осознавать »и« осознавать », чтобы найти наиболее подходящие синонимы.

Как это сделать? СПАСИБО за помощь.

Ответы [ 2 ]

1 голос
/ 28 января 2012

Проблема в порядке замены. Ваш код сначала находит «осведомлен», затем «осознает», и заменяет оба из них, прежде чем «осознавать». Если вы хотите, чтобы этот метод работал, вам, вероятно, придется переупорядочить массив $synonyms, чтобы сначала найти самые конкретные фразы, а затем самые общие ("знать о "до" в курсе ").

0 голосов
/ 28 января 2012

Простой ответ, если это возможно, будет пометить все возможные замены, чтобы они точно не перекрывались.

ex:

$sentence = "When it ::comes:: ::time to:: renew your ::auto:: ::insurance:: ::policy::" 

Теперь вам нужно изменитьверхняя часть кода:

for ($i=0; $i < count($synonyms); $i++) {
   $words = explode("|", $synonyms[$i], 3);
   $searches[$i] = "::".$words[0]."::"; // Change this line
   $replaces[$i] = $synonyms[$i];
}
...