2016-03-24 3 views
1

Есть ли какой-то способ, которым я могу применить разбиение предложения на более мелкие предложения для выполнения поиска баз данных. Мой клиент хочет, чтобы выполнить поиск по базе данных, как в этом примере:Использование PHP для разделения предложения на более короткие предложения

Первый запрос: Истец попал в аварию, в кафе Второй запрос: Истец попал в аварию, в кофе (in case document states it was a bar etc.) Третий запрос: Истец попал в аварию, в ... Последний запрос: Заявитель

Я нахожу много тем о расщеплении sentece по слову, но ничего о кусках слов. Какие-либо предложения?

+2

Есть много способов кожи этой конкретной кошки. –

+0

Как определить механизм «поворота» для разных запросов в вашей задаче? Я имею в виду, как программа знает, сколько слов должно содержать каждый запрос? – RomanPerekhrest

+0

@RomanPrekhrest, каждый новый запрос должен быть равен предыдущему запросу минус одно слово. –

ответ

1

Простое решение с explode, implode и array_slice функции:

$str = "Claimant had an accident in the coffee shop"; 
$words = explode(" ", $str); 
$count = count($words); 

echo implode(" ", array_slice($words, 0, $count)) . "<br>"; // first request 
while (--$count) { 
    echo implode(" ", array_slice($words, 0, $count)) . "<br>"; 
} 

выход:

Claimant had an accident in the coffee shop 
Claimant had an accident in the coffee 
Claimant had an accident in the 
Claimant had an accident in 
Claimant had an accident 
Claimant had an 
Claimant had 
Claimant 
+0

Вы настоящий MVP! –

+0

Здорово это слышать! Большое спасибо) – RomanPerekhrest

1

Вы можете использовать explode(" ", $str). Затем вы можете восстановить предложение слово за словом (за исключением слов вне этой конкретной итерации).

Нечто подобное (петли могут быть выключены, я никогда не писал PHP раньше):

for ($x = count($sentence); $x >0; $x--) { 
    for($y = 0; $y < $x; $y++) { 
     echo $cars[$y]; 
     echo "<br>"; 
    } 
    echo "<br>" 
} 
+0

Это как-то правильно, если я использую ваш подход в обратном порядке. –

+0

@IvanVenediktov Не стесняйтесь использовать его, как хотите. Вы также можете принять мой ответ, если найдете его полезным. – Laurel

0

Вы можете написать регулярное выражение, что расколы, основанные на знаки препинания. Этот пример, который расщепляется на периоды, вопросительные знаки, восклицательные знаки и линии истекшим, вы должны получить начал:

$data = 'First request: Claimant lost $500 in the coffee shop. Second request: (unknown) Claimant had an accident? Third request: Claimaint went to the hospital! End of report'; 

preg_match_all("/\s*(.*?(?:[\.\?\!]|$))/", $data, $matches); 
foreach ($matches[1] as $sentence) { 
    if (preg_match("/\S/", $sentence)) { 
     print "Sentence: $sentence\n"; 
    } 
} 

Результаты:

Sentence: First request: Claimant lost $500 in the coffee shop. 
Sentence: Second request: (unknown) Claimant had an accident? 
Sentence: Third request: Claimaint went to the hospital! 
Sentence: End of report 
1

Еще один вариант использования строковых функций:

$string = 'Claimant had an accident in the coffee shop'; 

echo "$string<br>"; // use the entire string first as first iteration of 
        // the loop will chop off the last word 

while ($string = substr($string, 0, strrpos($string, ' '))) { 
    echo "$string<br>"; 
} 
Смежные вопросы