Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Инструменты для анализа текста

Доброго времени суток, господа.

Недавно столкнулся с проблемами, которые подразумевают необходимость анализа текста, к примеру:
— Есть файл, в нем есть набор символов, что-то вроде «PPP» , «QP», «$%#lt}=», «-d99S$%» (т.н. шумы) и есть «нормальные» слова, например «cluster» «safari», «billgates» etc. Задача: убрать из файла шумы и оставить нормальные слова
— Распарсить rss-ленту dou с вакансиями и составить список всех трендовых технологий, будь то джава, монго дб и прочее. В данном случае, хотелось бы учесть, что появляются новые технологии, следовательно, наперед заданный словарь придется обновлять. Не хотелось бы.

Для этих нужд я решил поковыряться с ElasticSearch. Если для первой задачи я не уверен, насколько он подойдет, то во втором все смотрится гораздо приятнее. Разумеется, для каждой из задачи можно написать очень мощную регулярку, но я боюсь, что не настолько крут.

Какие у вас есть идеи для решения задач подобного типа? И вообще, насколько перспективна эта сфера? Спасибо.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

для первого проще всего построить байесовский классификатор по, скажем, триграммам букв в слове. для второго — строим модель вероятности слов (или последовательностей слов) в тексте, и выделяем слова, которые начинают появляться чаще, чем мы того ожидаем. хорошо еще натренировать модель с учетом времени — скажем, если тренировать модель на старых объявлениях за несколько лет, и использовать timestamp

ElasticSearch не совсем из той оперы, то что вам нужно — Natural Language Processing.
Пример как это работает на питоне
>>> import nltk >>> word_list = set(nltk.corpus.words.words()) >>> sentence = "PPP QP $%#lt}= -d99S$% cluster safari billgates" >>> print " ".join(w for w in nltk.wordpunct_tokenize(sentence) if w.lower() in word_list) cluster safari >>> 
Список слов конечно же можно расширить и billgates-ом и donaldtrump-ом :)

Если задача именно такова, как ты её поставил — делай проще: лови заголовки популярных изданий, парси их, и когда там что-то новое всплывает с частотой, превышающей заданный тобой порог — добавляй в словарь.
Тем же алгоритмом можешь выбрасывать лишнее из словаря.

Слова являются абсолютно таким же шумом. Не веришь — удали из своей темы все пробелы, и попробуй читать.

Ладно, упрощу задачу: переведи все буквы в строчные, удали знаки припинания и абзацы, пробуй читать вслух.

Так что по ходу твоя задача сводится к определению понятия «разделитель». Что есть разделитель между словами. На основе его составляй регулярку и натравливай на массив текста примерно 200кБ, когда справится — давай больше массивы, смотри что пропускается, правь регулярку.

Примерно так из трафика ловятся логины и пароли. И что-то мне подсказывает, у тебя именно такая задача. Потому ключевой аспект такого фильтра говорить не стану, я по другую сторону баррикад.

мб тм?
cran.r-project.org/…​kages/tm/vignettes/tm.pdf
Да и вообще на многих языках есть подобные пакеты.

Сфера очень интересная. Попробуйте использовать похожий алгоритм для анализа результатов „гадания на линуксе”. На выходе гадания есть „шумы”, но встречаются и „нормальные” слова. Пример гадания в вашем случае.

~$ cat /dev/urandom | base64 | grep -i John | grep -i die
dGyLVXZBqoZw9472M5wFz+ds+gXeRSw853wzbfmrWV2FFz+f9Uo88DN80rJOhNe20aY3YkwleDiE
Q+SXjaGQhxSbfY5mDIel6+zsiBsDzqSUZTpyv0j4EUzVpdY6CsYv0wFxt7c/jVgB1a3joHN2nWbz
UHCQJaDiEvWl2rDFHQphgv8yFPy3fO95niwDA5j/2jotEHBjOhnDbz/aDtoT3hJqC/2LxCWjXU+8
L00ymOdIEiYwkqYXZJcWPdD42uU2uH3yzCagV1CwqjOhNV2ISmfOcK8oG4BtBwuQmi+/CRiF8R3e
ZbjYRcsMGTUGe4hb7Y2ypUNvAune+iADiEXxYiYVpmq3+3Qc6baeEfp+aQYciVgxaV5jqnPjohNN
ABcczn+FjOHnRcyRI5RgW9oDiEjTL6I+ZR8kezDBighMRiKD/++uMh7gec4vixspSogwqPsMDHc1
4JtovHt3HIbEDV8BDB5j/Ax0Y8H/cg+6SIF0jOHnN4DAnvPuCdBfR32skapAqlvqHDiEEnrbCGpR
/nHaTJOHn28ihIhKQ8uQjJP4kYjSKOSPaZ+2Zjt9IZvaODf9OOt+vLly+1+naBWA25K7YdYDiEXb
fktbqliQdIeOQIUNc+dsjOHNjghgkq+V9SpoX5/vfRvc7+tut10cO3M/Vt28j5/Iz3tWrMT6hHkq
cTnasPjJu/diEv+YUlsOD1xTrjHDWWsj7mJXfJxuWfDZmNhiT9joHnuSxbrQQ437XfLu4PuF1fuI

цель — понять как именно и насколько скоро, ну Ваши ощущения при этом. Ну, Вы поняли.

Підписатись на коментарі