У меня есть (несовершенно) кластеризованные строковые данные, где элементы в одном кластере могут выглядеть следующим образом:
[
Yellow ripe banana very tasty,
Yellow ripe banana with little dots,
Green apple with little dots,
Green ripe banana - from the market,
Yellow ripe banana,
Nice yellow ripe banana,
Cool yellow ripe banana - my favourite,
Yellow ripe,
Yellow ripe
],
где оптимальный заголовок будет 'Желтый спелый банан' .
В настоящее время я использую простую эвристику - выбираю наиболее распространенное или самое короткое имя, если связываем, - с помощью SQL GROUP BY. Мои данные содержат большое количество таких кластеров, они часто меняются, и каждый раз, когда новый фрукт добавляется или удаляется из кластера, заголовок для кластера должен пересчитываться.
Я хотел бы улучшить две вещи:
(1) Эффективность - например, сравнивайте название нового фрукта только с названием кластера и избегайте группирования / фразы всех названий фруктов каждый раз.
(2) Precision - вместо того, чтобы искать наиболее распространенное полное имя, я хотел бы извлечь наиболее распространенную фразу. Текущий алгоритм выбрал бы «Желтый спелый», который повторяется 2 раза и является наиболее распространенной полной фразой; однако, как фраза «Желтый спелый банан» является наиболее распространенным в данном наборе.
Я думаю об использовании Solr + Carrot2 (не получил опыта со вторым). На этом этапе мне не нужно кластеризовать документы - они уже сгруппированы на основе других параметров - мне нужно только выбрать центральную фразу в качестве центра / заголовка кластера.
Любой вклад очень ценится, спасибо!