|
|
|
| Здравствуйте! Никак не могу справиться с такой задачей. Нужно найти слово в тексте и вернуть вместе с предложением, в котором слово встретилось.
Пытаюсь делать так
$pre_stop= strpos($read,"слово");
$stop=strpos($read,".",$pre_stop);
$read1=substr($read,0,$pre_stop);
$start=strrpos($read1,".");
$read=substr($read,++$start,++$stop);
|
Но работает некорректно, пропускает точки и выводит целый блок текста, нужно одно предложение. В идеале 2 или 3
Заранее спасибо. | |
|
|
|
|
|
|
|
для: shest
(05.11.2007 в 18:19)
| | Вот мой вариант =)
$word_pos = strpos($read, $word);
$to_word = substr($read, 0, $word_pos);
$start = strrpos($to_word, ".");
if ($start != 0) $start++;
$to_stop = substr($read, $word_pos);
$stop = strpos($to_stop, ".") + 1 + $word_pos;
$text = substr($read, $start, $stop);
|
| |
|
|
|
|
|
|
|
для: ddhvvn
(05.11.2007 в 19:43)
| | Будет в предложении запись, например, В. И. Петров, и не сработает. Да и конец предложения, это точка + пробел, уж если так. | |
|
|
|
|
|
|
|
для: sim5
(05.11.2007 в 20:09)
| | >Будет в предложении запись, например, В. И. Петров, и не сработает. Да и конец предложения, это точка + пробел, уж если так.
А может точка + перенос строки! =)
Тем более В. И. Петров - это и тут есть точка + пробел =)) | |
|
|
|
|
|
|
|
для: ddhvvn
(05.11.2007 в 20:39)
| | Может и такое быть, всякое может, потому и варианты заведомо провальные.) | |
|
|
|
|
|
|
|
для: sim5
(05.11.2007 в 20:41)
| | Нет, почему же, можно написать скрипт с кучой проверок... типа проверки, если встретился 1 символ + точка + пробел, то это не конец предложения, а инициалы и т.п. =)) | |
|
|
|
|
|
|
|
для: ddhvvn
(05.11.2007 в 20:43)
| | А если будет так: "В.И. Ленин"? А если такое: "и т.д.."? А если будет так: "и пошел..."? Вариантов может быть много. :-) | |
|
|
|
|
|
|
|
для: sim5
(05.11.2007 в 21:01)
| | Много, но не очень...
Опять же, говорю, если очень сильно надо и если захотеть, то можно просчитать 99% вариантов и написать довольно большой, но работающий скрипт =) | |
|
|
|
|
|
|
|
для: ddhvvn
(05.11.2007 в 22:12)
| | А я разве спорю, что нельзя? Просто у автора не получается, а не получается потому как раз, мне так кажется, что нет четкого распознавания предложения. | |
|
|
|
|
|
|
|
для: sim5
(06.11.2007 в 04:10)
| | Например, чтобы избавиться от проблемы "В. И. Ленин", нужно ещё проверять длину предложения. Если один симвлоз, значит не считать за предложение :) | |
|
|
|
|
|
|
|
для: morkovkin
(06.11.2007 в 05:48)
| | >Например, чтобы избавиться от проблемы "В. И. Ленин", нужно ещё проверять длину предложения.
Чтобы решить это проблему, нужно поступить по-христиански - закопать. :) | |
|
|
|
|
|
|
|
для: sim5
(06.11.2007 в 06:29)
| | И это тоже :)) Но мне лично пофиг, пусть лежит где угодно :) | |
|
|
|
|
|
|
|
для: shest
(05.11.2007 в 18:19)
| |
$read=substr($read,++$start,(++$stop-$start));
|
| |
|
|
|
|
|
|
|
для: bronenos
(05.11.2007 в 19:44)
| | Всё равно некоторые предложения кусками выводит
Полностью получилось следующее
$word_pos= strpos($read,$line);
$to_word = substr($read, 0, $word_pos);
$start = strrpos($to_word, ".");
if ($start != 0) $start++; else $start=0;
$to_stop = substr($read, $word_pos);
if(strpos($to_stop, ".")===false)$stop=strlen($to_stop);
else $stop = strpos($to_stop, ".") + 1 + $word_pos;
$read=substr($read,$start,(++$stop-$start));
|
Но дело в том, что работать приходится на сложном тексте-html и php страницах, очищенных от тегов и кода. Т.е. встретиться может любая ситуация. | |
|
|
|