Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.02.02;
Скачать: [xml.tar.bz2];

Вниз

Определение темы текста по словарю.   Найти похожие ветки 

 
NBAH1990   (2013-03-19 17:02) [0]

Доброго времени суток, уважаемые знатоки. По работе приходится перебирать иного текста и распределять его в 2 группы "То что надо " и "То что не надо". Проведя не хитрый анализ множества текстов из серии "То что надо" вывел словарь со словами чаще всего появляющимися в подобных текстах. Теперь хочу написать маленькую прожку, которая обращаясь к словарю определяла бы принадлежность текста к группе "То что надо" или отбрасывала в "То что не надо". Не знаю как бы правильно составить алгоритм. У кого какие идеи? Мб изначально не верной дорогой пошел?


 
Ega23 ©   (2013-03-19 17:06) [1]

Словарь:
Токен - Вес токена.
Соответственно, парсишь документы, суммируешь вес каждого токена.
Принимаешь решение на основе полученного общего "веса" документа.


 
Ega23 ©   (2013-03-19 17:08) [2]

Веса подбираешь сам, по степени важности (это тебе виднее, какие токены должны иметь вес 100500, а какие - 0).
Порог общего веса документа - тоже сам определяешь.

Как-то так.


 
NBAH1990   (2013-03-19 17:19) [3]


> Веса подбираешь сам, по степени важности

т.е. если у меня уже есть словарь с ключевыми словами, то самое частое слово будет весить больше всех? Ещё была идея, высчитать процент слов из словаря входящих в текст.


 
Ega23 ©   (2013-03-19 17:23) [4]


> т.е. если у меня уже есть словарь с ключевыми словами, то
> самое частое слово будет весить больше всех?


Это один из вариантов решения. Есть и другие.
Например, документ крайне важен, если в нём упоминается "Урюпинск". Значит вес токена "Урюпинск" должен быть заведомо выше порога важности документа.


 
O'ShinW ©   (2013-03-19 17:26) [5]

Если брать текст, читать глазами, давать тему руками.

Из него все слова в словарь добавлять, с пометкой, к какой теме  они.
В БД, естественно
Таблица тем, таблица слов, кросс-таблица.
выкинуть слова, подходящие ко всем темам ("в", "на" и т.п.)

правильно,

> высчитать процент слов из словаря входящих в текс

Еще таблица частот слова в теме

Хм.. А тема, пожалуй, интересная..


 
Ega23 ©   (2013-03-19 17:29) [6]


> В БД, естественно

Знаешь, какого размера будет БД? :)


 
O'ShinW ©   (2013-03-19 17:32) [7]

догадываюсь :)
Но если тем не много - не должно быть сильно дуто


 
NBAH1990   (2013-03-19 17:59) [8]

Я сделал проще, собрал много сообщений по теме в один большой текст и провёл семантический анализ. Вот результаты анализа (Слово, количество в тексте, частота использования в процентах)

интернет  11  1.05
модем  11  1.05
номер  9  0.86
все  8  0.76
подключить  7  0.67
услуга  7  0.67
связь  6  0.57
скорость  6  0.57
ваш  5  0.48
деть  5  0.48
добрый  5  0.48
написать  5  0.48
план  5  0.48
приходить  5  0.48
спасибо  5  0.48
тарифный  5  0.48
тарифный план  5  0.48 / 0.95
тенг  5  0.48
чтоб  5  0.48

таблица не вся, для анализа взял больше сотни сообщений.


 
NBAH1990   (2013-03-19 18:16) [9]

Вот ещё вариант в голову пришел. Есть у меня результаты анализа Всех нужных текстов, и есть результаты анализа текущего текста. Мб как-то сравнивая таблицы искать степень соответствия?


 
Ega23 ©   (2013-03-19 19:21) [10]

1. "индекс цитируемости" и "вес" - это несколько разные вещи. Есть наиболее часто встречаемые слова. Есть "весомые" слова. Весомые могут встречаться реже, но они - более важные.
2. "интернет", "Интернет", "интернета" - суть одно слово. "Услуга", "услуга", "услуг", "услуги", "услугой" и т.д. - тоже. Т.е. морфологию надо учитывать, по-хорошему.
3. Ты уверен, что ты именно "семантический анализ" провёл? Есть у меня в этом некие сомнения...


 
Лингвист   (2013-03-20 11:32) [11]

> NBAH1990
> все
> ваш
> чтоб

Есть опасение, что эти и им подобные слова будут встречаться чуть ли не во всех текстах. Кстати, Вашим "семантическим анализом" именно это и подтверждается - потому что никакой это не семантический анализ, а просто подсчет частоты использования (что, собственно, Вы сами и написали).

Вывод - общеупотребительные слова (предлоги, местоимения и т.п.) вообще не должны учитываться (то есть, их вес должен быть нулевым).


 
O'ShinW ©   (2013-03-20 11:51) [12]

я ж говорю - берешь текст, читаешь глазами, даешь название руками
нажимаешь "записать"

Далее, программка разбирает текст по словам, если нет еще слов в словаре - добавляет.

Далее пишет темы в другую таблицу

Потом пишет в кросс таблицу
id_слова, id_темы, кол-во раз в тексте

Скормив таким образом несколько текстов(десятков, или сотни), (фактически, произведя обучение(задумались о нейронке, кстати)) имхо, получим неплохую статистику слов по темам.

Прибили(простым запросом) слова попадающие в разные темы, с кол-вом более [много].

Далее скармливаем очередной текст, смотрим каких слов попало больше. В случае со "своя/чужая" тема трудностей особых не видать, вроде.
Причем,
>> "интернет", "Интернет", "интернета" - суть одно слово
при достаточном кол-ве испытаний (продолжительном обучении) уже можно не учитывать.
Пусть считаются разными.

Вчера начал писать, на досуге
Задачу взял шире - определить из N тем, к какой более относится.
Если не брошу :), сообщу что получается


 
Ega23 ©   (2013-03-20 11:53) [13]

Вооот.
Вот Влад как раз труъ-семантический анализ описал. :)


 
Ega23 ©   (2013-03-20 12:05) [14]


> при достаточном кол-ве испытаний (продолжительном обучении)
> уже можно не учитывать.
> Пусть считаются разными.

Скользкий момент.


 
O'ShinW ©   (2013-03-20 12:09) [15]


> Потом пишет в кросс таблицу
> id_слова, id_темы, кол-во раз в тексте

еще плотность = кол-во этого слова в тексте / на общее кол-во слов в тексте

а вот с определением ВЕСА..
После прогона многа текстов -
Или сидеть, обучать - выбрал тему, программка показывает слова к ней относящиеся, руками проставляешь веса
Или не понятно пока как..


 
O'ShinW ©   (2013-03-20 12:09) [16]


> Скользкий момент.

Согласен. Зато просто, что бы попробовать


 
Ega23 ©   (2013-03-20 12:18) [17]


> Согласен. Зато просто, что бы попробовать


Не, ну понятно, с чего-то надо начинать. А морфология - это вообще задница. Ну и правописание - тоже нужно учитывать, всякие там "расстояния Ливенштейна" прикручивать. Интересно, но трудоёмко, шо писец.


 
Медвежонок Пятачок ©   (2013-03-20 12:27) [18]

а что насчет такой темы текста:

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


 
Ega23 ©   (2013-03-20 12:34) [19]


> а что насчет такой темы текста:

Сеошников - на кол и сжечь!


 
O'ShinW ©   (2013-03-20 12:50) [20]

А кого не сжечь, тому два года расстрела


 
O'ShinW ©   (2013-03-25 22:21) [21]

Получилось, вроде :)
Алгоритм не изменился

Взял три темы():
1. Про компьютеры
2. О природе что-то
3. Что-то про науку

Базу(обучение) заполнял первыми попавшимися статьями ( из гугла)

Например, кусок статьи о делении ядер урана на википедии оценена как
Что-то про науку 78
Компьютерная тема 15
О природе что-то 14

Оценка прикола http://ithappens.ru/story/10750
Компьютерная тема 64
Что-то про науку 26
О природе что-то 22

для первого приближения пойдет :)

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

оценен как
Компьютерная тема 7
О природе что-то 4
Что-то про науку 3

:)


 
Inovet ©   (2013-03-25 22:26) [22]

> [21] O"ShinW ©   (25.03.13 22:21)

Про науку и о природе не близкие темы? Не в смысле природы "Хорошо в деревне летом", а природы как мироустройства.


 
clickmaker ©   (2013-03-25 22:33) [23]

любую тему можно оценить как "что-то про науку" и "о природе" )


 
O'ShinW ©   (2013-03-26 08:44) [24]

не, не, не
О природе что-то - это в  смысле Пришвин, Бианки, Паустовский - кого вспомнил, короче. Короткие рассказы.
именно >  в смысле природы "Хорошо в деревне летом"

> Что-то про науку
Это статьи с гугла по поиску "наука" (в основном РАН, элементы ру)

> Компьютерная тема
Этот из потрепаться выборочно, ixbt, выборочно microsoft.com

примерно по 50 статей каждой тематики было загружено в БД, разобрано по словам более 3х символов, уникально составлен словарь, полностью кросс-таблица.

Проверочный текст разбирается так же,  по словам более 3х символов, в отдельную таблицу.
Далее к ней три раза(по числу тем) джойнится кросс-таблица по айдишнику слова(тут же подзапросом удаляются слова, которые во всех темах встретились более N раз ).
Наружу торчат айдишники тем. Группируем по ним, суммируя частоту повторений слова по теме. Это и есть результат.

Вчера свет рубанули, сегодня уже не дома, а то бы показал :)


 
O'ShinW ©   (2013-03-26 09:12) [25]

хотя.. что там показывать -
Delphi - мемо, комбобокс с темами, две кнопки: Обучение, Анализ.
Обучение - Вставляем в мемо, выбираем тему, жмем Обучение.
Анализ - Вставляем в мемо, жмем Анализ, тут же в мемо читаем результат
Все на MSSQL сервере (ExpressEdition), через хранимки.
Скрипт на создание БД, если интересно, приложу


 
Ega23 ©   (2013-03-26 10:18) [26]


> О природе что-то - это в  смысле Пришвин, Бианки, Паустовский
> - кого вспомнил, короче. Короткие рассказы.

BBC Wild с закадровым Дроздовым - наше всьё!


> Скрипт на создание БД, если интересно, приложу

Кинь всё на o.v.egorov гмаил.ком


 
O'ShinW ©   (2013-03-26 19:27) [27]

сбросил.
Что забыл - сбросил без данных, а без заранее заданных тем, нечего будет выбрать
поэтому
INSERT INTO [dbo].[Themes] ([Theme]) VALUES ("Тема1");
INSERT INTO [dbo].[Themes] ([Theme]) VALUES ("Тема2");
INSERT INTO [dbo].[Themes] ([Theme]) VALUES ("Тема3");

если больше, то надо хранимку пересматривать.
[GetTxtClass]
Или тупо дописать 4й join, или придумать универсально
тут:
...
where WT.IdWord not in (
    SELECT
     W.IdWord  
   FROM
    WordTheme wt1
    join WordTheme wt2 on wt2.IdWord = wt1.IdWord
    join WordTheme wt3 on wt3.IdWord = wt1.IdWord
    join Words W on W.IdWord = WT1.IdWord
   where
    wt1.IdTheme <> wt2.IdTheme
    and wt2.IdTheme <> wt3.IdTheme
    and wt1.IdTheme <> wt3.IdTheme
   and wt1.Cnt > @LevelIgnor
   and wt2.Cnt > @LevelIgnor
   and wt3.Cnt > @LevelIgnor



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2014.02.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.003 c
2-1364484308
ch_dark
2013-03-28 19:25
2014.02.02
помогите не могу разобраться с меню


15-1377203403
Юрий
2013-08-23 00:30
2014.02.02
С днем рождения ! 23 августа 2013 пятница


2-1364394906
8-bytes
2013-03-27 18:35
2014.02.02
приложение в трехзвенке


15-1376656788
Иксик
2013-08-16 16:39
2014.02.02
Размер обычной советской шахматной доски


15-1376375006
[ВладОшин]
2013-08-13 10:23
2014.02.02
Перелогиниться в домене, не закрывая программ. Можно?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский