gephaest
@gephaest
PHP, Yii2, Laravel

Алгоритм парсинга страниц по списку ключевых слов?

Добрый день.Вопрос про сам процесс парсинга страницы, а не ее получение (с помощью curl или любого другого инструмента).
Есть некая страница (HTML-документ) и список ключевых слов. Необходимо получить количество вхождений каждого слова на странице. Мне пришло в голову только генерировать регулярку (что-то вроде (слово1|слово2|слово3)), а потом считать простым перебором количество вхождений.
Какие есть более изящные решения? Реализовывать предполагаю на PHP или nodejs.
  • Вопрос задан
  • 732 просмотра
Пригласить эксперта
Ответы на вопрос 3
angrySCV
@angrySCV
machine learning, programming, startuping
переборы, переборчики, простите мама так жизнь меня воспитала, по пхпэшным понятиям блатным.
откуда такая любовь у пхпшников всё через переборы реализовывать?
когда у вас ключевиков за несколько тысяч перевалит, вы часами будете ждать результаты ваших переборов, тем более на пхп).
более изящные решение - использовать суффиксные деревья.
Ответ написан
Комментировать
kimono
@kimono
Web developer
sandbox.onlinephpfunctions.com/code/37932fd36ced8e...
$text = 'Добрый день.Вопрос про сам процесс парсинга страницы, а не ее получение (с помощью curl или любого другого инструмента).
Есть некая страница (HTML-документ) и список ключевых слов. Необходимо получить количество вхождений каждого слова на странице. Мне пришло в голову только генерировать регулярку (что-то вроде (слово1|слово2|слово3)), а потом считать простым перебором количество вхождений. 
Какие есть более изящные решения? Реализовывать предполагаю на PHP или nodejs.';

preg_match_all('/слово|документ/ui', $text, $matches, PREG_PATTERN_ORDER);

print_r($matches);


Array
(
    [0] => Array
        (
            [0] => документ
            [1] => слово
            [2] => слово
            [3] => слово
        )
)
Ответ написан
@abcd0x00
Нагруженное множество надо сделать.
Потом просто получаешь последовательность всех слов страницы, проходишь по ним, сравнивая с шаблоном, и инкрементируешь счётчик во множестве для соответствующего ключа.

Вот тебе иллюстрация на питоне
>>> words = ['a', 'b', 'c', 'a', 'b', 'b']
>>> 
>>> d = {}
>>> for i in words:
...     if i in d:
...         d[i] += 1
...     else:
...         d[i] = 1
... 
>>> print(d)
{'b': 3, 'c': 1, 'a': 2}
>>>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы