|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
SELECT * FROM fts_tbl WHERE to_tsvector (column) @@ to_tsquery ('language','Text') ищет все вхождения 'Text' в fts_tbl а как сделать наоборот: поиск всех вхождений ключевых слов (из справочной таблицы) в заданный текст? Т.е. нужно подобрать ключевые слова к тесту из справочной таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 12:48 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Конкретно: меня интересуют операции сравнения двух векторов to_tsvector ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 12:53 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Мигратор данныхТ.е. нужно подобрать ключевые слова к тесту из справочной таблицыСлова же у Вас уже есть в тексте, зачем их подбирать ? Может быть Вы хотели спросить «как получить основную словоформу для каждого слова заданного текста» ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 13:08 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Мигратор данныхКонкретно: меня интересуют операции сравнения двух векторов to_tsvector Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 13:09 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Ёш, Таблица тегов (ключевых слов): Школа Вечер Утро Текст: Посещение школы вечером Автоматически подобранные теги: Школа Вечер Сейчас у меня тупо ищет для каждой строки из таблицы тегов вхождение в искомый текст. Недостатки: низкая скорость ложные срабатывания - отсутствует разбор на слова/лексемы П.С. Текст сам не на русском - ангийский, немецкий. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 13:16 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
для русского языка тупой поиск вхожения вообще не подходит - нужно обязательно обрезать окончания. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 13:19 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Ну тут по моему очевидно что вам надо взять текст, разбить его по словам и сделать выборку с помощью ts_query в справочную таблицу по каждому из слов текста. :) ну а как это оптимизировать это уже дело техники ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 13:56 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Мигратор данных, значит вам нужен результат пересечения двух стрипнутых векторов. Такой функции нет, но вы можете написать ее сами. Чтобы быстро вытаскивать слова со статистикой вам понадобится функция Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Использование ее для получения массива из tsvectora paper.fts Код: plaintext 1. 2.
Дальше напишите (и поделитесь со всеми) функцией которая сравнивает два сортированных списка. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 14:12 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Почти решение: SELECT tg.tag FROM tags tg WHERE to_tsvector('russian', tg.tag) @@ plainto_tsquery('russian', 'Учителю русского языка') нужно только в plainto_tsquery AND заменить на OR. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 14:17 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
помогите решить: >в plainto_tsquery AND заменить на OR. это не работает: to_tsvector('russian', tg.tag) @@ replace (plainto_tsquery('russian', 'Учителю русского языка'), '&', '|') ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 14:31 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
http://www.mail-archive.com/pgsql-general@postgresql.org/msg102694.html]Решение последнего вопроса: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 14:34 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
или проще: SELECT replace (plainto_tsquery('russian', 'Учителю русского языка')::text, '&', '|')::tsquery ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 15:25 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Мигратор данных, что-то я Вас не пойму, а какая разница что с чем сравнивать ? теги с текстом или текст с тегами ? Почему Вас не устраивает обычный join и зачем Вы текст в tsquery преобразуете ? проще же тег в tsquery, а текст в tsvector. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2010, 16:29 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Ёш, очень интересное решение, но у меня вот разыгрался аппетит. 1. Как найти 10 ближайших похожих текстов для данного текста 2. Как найти 10 самых похожих текстов Похожесть считать как w1 && w2/ (w1 U w2) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2010, 00:34 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
>Ёш огромное спасибо за скорректированный алгоритм! это решение есть идеальное. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2010, 10:21 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Oleg Bartunov1. Как найти 10 ближайших похожих текстов для данного текстадля каждого текста сделать массив словоформ, отфильтровать по пересечению с массивом словоформ данного текста (... where words && nwords('данный текст')) и отсортировать по похожести Oleg Bartunov2. Как найти 10 самых похожих текстовможно через cross join только там будет в два раза больше из-за повторов «A похоже на Б» и «Б похоже на А» Oleg BartunovПохожесть считать как w1 && w2/ (w1 U w2)количество общих слов разделить на общее количество слов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2010, 12:51 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
Oleg Bartunov1. Как найти 10 ближайших похожих текстов для данного текста Ёшдля каждого текста сделать массив словоформ, отфильтровать по пересечению с массивом словоформ данного текста (... where words && nwords('данный текст')) и отсортировать по похожести [/quot Ёш] Да, можно просто взять массив из tsvector-а, как я приводил выше. [quot Oleg Bartunov]2. Как найти 10 самых похожих текстов Ёшможно через cross join только там будет в два раза больше из-за повторов «A похоже на Б» и «Б похоже на А» [/quot Ёш] ну, это легко фильтруется "tab1.id ne tab2.id" или просто взять диагональную матрицу "tab1.id > tab2.id" [quot Oleg Bartunov]Похожесть считать как w1 && w2/ (w1 U w2) Ёш количество общих слов разделить на общее количество слов ? Да, пересечение делить на объединение, Jaccard. Но это не принципиально, это как раз предмет исследования. Меня просто давно такая идея преследует, в постгресе найти простой способ поиска похожих документов, но сил и времени нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2010, 15:24 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
вот еще очень серьезная задача: предположим теги выбираются на базе ts_vector из нескольких полей иногда подбираются слишком много тегов. как более-менее правильно убрать лишние теги? у нас есть только функцуия ts_rank_cd. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2010, 12:50 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
решил проблему "похожести" по другому: кандидаты на дубли нужно выбирать условием: plainto_tsquery ('Hello, our World World') <@ plainto_tsquery ('Hello, our worndefull World!'), length(to_tsvector ('Hello, our World World')) - length(to_tsvector ('Hello, our worndefull World!')); первое выражение должно быть true второе - по модулю накладываем ограничение <=1,2 или 3 - как много значимых слов можно добавить в исходный текст, чтобы его все еще считать дубликатом Например: Приглашение на концерт Приглашение на большой симфонический концерт Но разные: Красная машина Красный домик по моему вложение гораздо адекватней пересечения ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2010, 17:07 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
sourcerНу тут по моему очевидно что вам надо взять текст, разбить его по словам и сделать выборку с помощью ts_query в справочную таблицу по каждому из слов текста. :) ну а как это оптимизировать это уже дело техники вот мне аккурат нужно это--ссамое "дело техники" только теги не простые слова, а "ключевые" -- 2---3--4 слова . часто с токенами, отбрасываемыми стандартными словарями (сплошь 12 токен "A[1:1]") взять пару килобайт текста, и последовательно запрыгивать на него своей ф--ей гибкого совпадения последовательностей токенов позаписно из таблички в 30--50МБ ключевых -- дорого. нужен предфильтр какойта. (у меня -- гин--индексы по массиву дистинктных лексем "ключевого" после спеллера. проверяется наличие всех токенов(кастрированных спеллером) ключевого в тексте. медленно. даже если забить на точность). хочется удобств типа "Ахо-Корасика" и иже с ними("Рабина — Карпа"). оно же наверняка на уровне обращения к словарям при лексемайзинге и реализовано. а вот то же самое -- но к табличке -- и не в С а чтобы концы торчали в SQL -- было бы интересно. ну и если у кого идеи есть сбора на коленке из овна и палок -- велкам. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 17:45 |
|
Подбор ключевых слов к тексту
|
|||
---|---|---|---|
#18+
продолжу постановку: есть дорогая ф--я проверки "кейворда" в теле текста(ов). есть таблица кейвордов. я "индексирую" тексты , отыскивая совпадения. допустимы небольшие потери. проверить 100000 кейвордов дорогой ф--ей дорого. нужна дешовая предфильтрация. я её делаю выделив массив дистинктных токенов в "кейворде" и в "тексте" . выделяю спелл-овским словарем. возможны небольшие потери из-за разного стемминга разных словоформ. основные потери времени -- на 2. речек довольно дорогой ф--ей выделения массива. и 1. -- на речек основной ф--ей проверки вхождения. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
2-е снимается материализацией поля. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
1-е требует улучшения способа преобразования текста и кейворда (желательно еще -- с уменьшением потерь), служащих для предфильтрации. добавил в массивы все последовательные пары Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
выигрыш гулькин -- 3-ка со всего, плюс чуть потери снял. откуда мораль -- нужно дешевое для 1. сравнения, 2 хранения (и/или для речека) преобразование[ия -- если разные] текста и "кейвордов", для предусекновения пр--ва "точного" перебора. есть ли какие--то готовые подходы ? могабыть в триграмках что--то ? или комбинаторику записать не в длинных лексемах, а в подстановке какой ? нет ? принимаю любые идеи а то я пока слепил страшненького горбатенького примерно так : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2017, 14:18 |
|
|
start [/forum/topic.php?fid=53&msg=36405128&tid=1996081]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 290ms |
total: | 431ms |
0 / 0 |