Я пытаюсь извлечь содержимое веб-страницы в виде обычного текста - без тегов html. Вот пример кода:
$dom = \Sunra\PhpSimple\HtmlDomParser::file_get_html($url);
$result['body'] = $dom->find('body', 0)->plaintext;
Проблема в том, что то, что я получаю в $ result ['body'], очень грязно. Конечно, HTML был удален, но предложения часто объединяются в другие, так как нет пробелов или точек для разграничения, где заканчивается текст из одного тега HTML, и начинается текст из следующего тега.
Пример:
<body>
<div class="H2">Header</div>
<div class="P">this is a paragraph</div>
<div class="P">this is another paragraph</div>
</body>
Результат:
«Заголовок это абзац, это другой абзац»
Желаемый результат:
«Заголовок. Это абзац. Это другой абзац»
Есть ли способ отформатировать результат с открытым текстом или, возможно, применить дополнительные манипуляции с внутренним текстом перед использованием открытого текста для получения четких разделителей для предложений?
EDIT:
Я думаю сделать что-то вроде этого:
foreach($dom->find('div') as $element) {
$text = $element->plaintext;
$result['body'] .= $text.'. ';
}
но есть проблема, когда div'ы вложены, так как это добавит содержимое родительского элемента, который включает в себя текст всех дочерних элементов, а затем добавит содержимое дочерних элементов, эффективно дублируя текст. Это можно исправить, просто проверив, есть ли </div>
внутри $text
.
Возможно, мне стоит попробовать обратные вызовы .