частота вхождений слова в текст

504 views
Skip to first unread message

mrgloom

unread,
Nov 12, 2013, 6:24:08 AM11/12/13
to pymo...@googlegroups.com
поможет ли pymorphy  для анализа частоты вхождения слов?
т.е. сначала делаем лемматизацию(перевод в нормальную форму), а потом считаем вхождения слов(возможно учитывая синонимы и близкие слова(однокоренные?или производные одно от другого) например творог - твороженный) + еще стоп лист нужен.

Задача такова, что допустим есть писатель, у него есть тексты(определенной тематики и стилистики) хотелось выделить топ-100  употребляемых слов по разным писателям.

Потом еще захотелось узнать степень похожести одного автора или текста на другой.
Вроде есть метод основанный на том, что мы берем всю кучу текста и выделяем все возможные слова, получается очень длинный вектор слов, потом для каждого рассказа\странички\предложения или какой либо сущности, находим вхождения этих слов,т.е. по сути у нас потом получается разреженная матрица из 0 и 1(или в ячейке частота вхождения слова), а потом можем анализировать эти вектора, например смотреть корреляцию между ними.

Mikhail Korobov

unread,
Nov 12, 2013, 7:36:01 AM11/12/13
to pymo...@googlegroups.com
Привет.

Поможет или нет - я точно сказать не могу, но вполне может помочь. Чтоб сказать точно, нужно разработать/выбрать какую-то метрику оценки, попробовать с нормализацией и без, и посмотреть, как метрика меняется. Для оценки похожести, правда, это не совсем просто может быть; видимо, критерием должна быть близость оценки, данной программой, к оценке, данной экспертом. Интуитивно - нормализация помогает делать данные менее шумными, но без нормализации можно учитывать более "тонкие" критерии. Bias/variance tradeoff в действии.

Кстати, насчет похожести авторов - тут удаление стоп-слов может помешать. Я сам эту задачу не решал, но где-то слышал/читал, что частота употребления различных служебных частей речи и других слов, обычно считаемых стоп-словами, - очень сильный признак для определения авторства, чуть ли не самый сильный :) Используемые слова средней частотности могут больше говорить о том, о чем текст написан, а не об авторе; частота же стоп-слов - это уже больше характеристика авторского стиля.

С нормализацией нужно быть осторожным, т.к. в pymorphy и pymorphy2 правила нормализации определяются словарем, и они не всегда лучшие для конкретной задачи. См. https://pymorphy2.readthedocs.org/en/latest/user/guide.html#normalization

Кроме отдельных слов можно еще биграммы/триграммы попробовать - что, например, выделять топ-100 употребимых фраз, а не только слов.

вторник, 12 ноября 2013 г., 17:24:08 UTC+6 пользователь mrgloom написал:

Yuri Baburov

unread,
Nov 12, 2013, 7:36:34 AM11/12/13
to pymo...@googlegroups.com
Привет,

если омонимичные слова и словоформы не различать (зАмок и заМок, ель и
есть в форме "ели", стать и сталь в форме "стали"), то можно. Это
слабое место морфологии, кстати, поэтому стемминг даёт ненамного
худшие результаты.
97-98% омонимии можно различить с помощью синтаксическо-семантического
парсинга (например см. http://kelijah.livejournal.com/97211.html )
Синонимию и однокоренные слова -- нужно искать отдельный словарь
(скажем, есть т.наз. специальный "словарь синонимов"), в той же
opencorpora (которая используется как база для pymorphy2) есть как
минимум однокоренные глаголы, инфинитивы и деепричастия.

2013/11/12 mrgloom <gloomy...@gmail.com>:
> --
> Вы получили это сообщение, поскольку подписаны на группу pymorphy.
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее
> сообщения, отправьте электронное письмо на адрес
> pymorphy+u...@googlegroups.com.
> Настройки подписки и доставки писем:
> https://groups.google.com/groups/opt_out.



--
Best regards, Yuri V. Baburov, Skype: yuri.baburov

mrgloom

unread,
Nov 13, 2013, 9:05:52 AM11/13/13
to pymo...@googlegroups.com
А можете кинуть пару примеров таких работ или по каким запросам гуглить?
Еще надо сказать что в лингвистике я не силён так что понятия лучше пояснять на примере для наглядности.
Вот например использую нормализацию(лемматизацию) из mystem, я выделил, что слова  ясно = 7, ясность= 1, ясный= 7 встречаются в тексте с такой то частотой, но эти слова очень похожи есть ли метод объединить их в одно?

вторник, 12 ноября 2013 г., 16:36:01 UTC+4 пользователь Mikhail Korobov написал:

mrgloom

unread,
Nov 13, 2013, 9:10:55 AM11/13/13
to pymo...@googlegroups.com
вот еще http://radimrehurek.com/gensim/tut1.html#from-strings-to-vectors
я так понимаю, что для очень больших объемов текстов, даже не используют все возможные слова, а составляют словарь признаков bag-of-words которым лучше всего можно описывать. (если я правильно понял что они там делают)

среда, 13 ноября 2013 г., 18:05:52 UTC+4 пользователь mrgloom написал:

Mikhail Korobov

unread,
Nov 13, 2013, 10:02:28 AM11/13/13
to pymo...@googlegroups.com
По ссылке просто одним из способов переводят информацию о словах в цифры. "Bag of words" - самый очевидный и простой способ это сделать: все слова нумеруются, документы тоже нумеруются, и составляется двумерный массив, где номер слова и номер документа - координаты, а значение - количество раз, которое данное слово встретилось в данном документе. В scikit-learn для этого есть CountVectorizer. В таких массивах обычно большинство значений == 0, поэтому их обычно хранят в разряженных матрицах из scipy.

Объединить "ясно", "ясный" и "ясность" с помощью pymorphy2, скорее всего, не выйдет, т.к. в словаре информации о связях между этими словами нет. Т.е. если это все-таки требуется, то нужно это самому как-то обрабатывать. Например, откидывать "о", "ый" и "ость" от всех слов, или в "фичи" добавлять варианты с первыми 2,3,4,5 буквами.

Но тут главное - понять, требуется это все или нет. Поэтому, как мне кажется, начинать нужно не с нормализации вовсе, а с разработки критериев оценки. Например, если задача - определение авторства, то набрать список текстов и проверять, скольких авторов алгоритм угадал. Если задача - определение похожести, для сотни-другой текстов определить сначала коэффичиент похожести самому (+, например, не только самому, но и еще кого-нибудь попросить). И потом уже смотреть на то, какие результаты дает "базовый" алгоритм, какие он делает ошибки, и как нормализация/стемминг на все это влияет (или не влияет). Вслепую такие вещи делать смысла мало.

среда, 13 ноября 2013 г., 20:10:55 UTC+6 пользователь mrgloom написал:

Serge Slepov

unread,
Nov 13, 2013, 10:15:29 AM11/13/13
to pymo...@googlegroups.com
Полностью с Михаилом согласен, что не стоит первым делом кидаться в дебри морфологии.  Можно сначала поиграться и со словоформами.  В конце концов, не всякий автор думал о морфологии, когда писал текст :)  Я уже игрался немного.  Правда, задачу ставил немного другую - выделение ключевых слов.  Вот что получилось: http://morpher.ru/keywords/

Reply all
Reply to author
Forward
0 new messages