xtps1987225 / cadbis

Automatically exported from code.google.com/p/cadbis
0 stars 0 forks source link

Categorizer #5

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
Необходимо разработать контентный фильтр, 
представляющий собой по сути 
категоризатор контента - на вход получает 
html код Web-страницы (String),
список категорий (List<ContentCategory>) с ключевыми 
словами(List<String>)
и список слов не несущих смысловой 
нагрузки (List<String>). Для каждой
категории может быть несколько ключевых 
слов по которым необходимо
определить принадлежность данной 
web-страницы к какой-либо категории. 
Алгоритм работы: 
   1. Очистка - нужно избавиться от html-тегов, знаков препинания, кавычек,
специальных символов и слов не несущих 
смысловой нагрузки (применяются
регулярные выражения)
   2. Получение списка ключевых слов - нужно разбить полученный очищенный
текст на слова, избавившись от пробелов (в 
итоге получается List<String>).
   3. Определение категории - необходимо по полученному списку ключевых
слов и спискам ключевых слов для каждой 
категории определить к какой из
категорий данный контент ближе всего.
Интерфейс для объекта "категория" выглядит 
следующим образом:
public interface ContentCategory{
  public List<String> getKeywords();
};
Интерфейс категоризатора:
public interface Categorizer{
  public ContentCategory recognizeCategory(String content,
List<ContentCategory> categories, List<String> unsenseWords);
}

Original issue reported on code.google.com by smec...@gmail.com on 18 Apr 2008 at 11:08

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
It is necessary to take into consideration the encoding of the content!

public ContentCategory recognizeCategory(String content,List<ContentCategory>
categories, List<String> unsenseWords, String charset);

Original comment by smec...@gmail.com on 9 May 2008 at 10:11

GoogleCodeExporter commented 9 years ago

Original comment by smec...@gmail.com on 12 May 2008 at 6:32

GoogleCodeExporter commented 9 years ago
Т.к. продвижений по таску не наблюдается, 
ответственным назначается Георгий.

Original comment by smec...@gmail.com on 15 May 2008 at 11:53

GoogleCodeExporter commented 9 years ago
Необходимо обратить особое внимание на 
теги 
<meta name="Description" content="ОПИСАНИЕ САЙТА">
<meta name="Keywords" content="rating, релевантность, relevancy, 
search engine,
morphology, Russia, поисковая система, Россия, 
русский язык, морфология, CompTek,
Yandex, Яндекс">
Ключевые слова можно брать просто отсюда - 
в том случае, если они присутствуют на
странице.

Original comment by smec...@gmail.com on 15 May 2008 at 12:01

GoogleCodeExporter commented 9 years ago
короч, осталось сделать чтобы конфликты 
резолвились и чтобы слова реально 
добавлялись
к категории
по идее алгоритм автоматического 
присвоения категории в "проксе" должен 
будет
работать примерно так же... допустим, после 
распознания есть категория баллы которой
превышают баллы каждой из остальных больше 
чем в 2 раза, тогда эта категория
назначается сайту а её ключевые слова - 
категории. единственное - как быть с
конфликтными ключевыми словами? можно их 
выводить в отдельную таблицу, а потом админ
будет разрешать к какой категории они 
относятся

например yandex.ru имеет ключевые слова 
новости и поиск, ты пытаешься назначить ему
Search Engines. а тебе говорят что yandex.ru имеет ещё 
и ключевое слово "новости",
которое уже сопоставлено с категорией 
"Newsgroups"
есть очень много слов которые встречаются 
в текстах постоянно ,например слов
местоимения, междометия, вводные слова, 
таки как "вы", "мы", "между", "бы" и т.д. эти
слова-паразиты нужно выявлять. причём 
сделать это можно только вручную. 
соответственно при разрешении конфликтов 
тебе предлагается опция "несмысловое"
которая удалить это ключевое слово из 
сопоставленной категории и запишет в 
список
несмысловых слов. 

Итого алгоритм такой:
работает прокся, видит ага у этого сайта 
категория "Webmail" превышает по рангу все
остальные, назначу-ка я её. назначает. все 
ключевые слова которые имеют ранг более
N(нужно будет где-то задавать это число) 
пытается сопоставить с этой категорией... и
бац! конфликт - категория "Porno" уже имеет 
слова "на", "в" и "уже". тогда прокся
записывает эти слова в таблицу 
"url_categories_keywords_conflicts" где указывает что
попытка добавления была для категории 
"Webmail" а ключевое слово уже сопоставлено с
"Porno". 
Остальные - неконфликтные ключевые слова 
сопоставляются с категорией "Webmail". Но не
факт что они все смысловые и  что они тем 
более относятся к данной категории. 
Потом заходит одмин и видит: ага, у нас 
конфликтные ключевые слова "на", "в" и "уже"
и ещё "при", "почта", "за", "программы" уже 
сопоставленные с "Webmail", но
конфликтующие когда прокся попыталась их 
добавить к "Software". Тогда одмин берёт и
ставит для "на","в","уже","при","за" - 
несмысловые, для "почта" - оставить их у
категории "Webmail" а для "программы" - заменить 
их для категории "Software"

Original comment by smec...@gmail.com on 16 May 2008 at 1:34

GoogleCodeExporter commented 9 years ago
ВАЖНО! 
Кодировка контента может быть 
неопределена в Response, но может быть 
прописана в
META-теге, например так:
<meta name="content-type" content="text/html; charset=Windows-1251"/>
В том случае, если контент матчится 
подобным регулярным выражением:
/<meta (name|http-equiv)=[\"|\']content-type[\"|\'] 
content=[\"|\'](.*)[\"|\'][>| \/>]/i
он содержит кодировку в META-теге. Её 
использование предпочтительнее чем
использование кодировки из Response (то есть 
той, которая передаётся в метод
recognizeCategory)

Original comment by smec...@gmail.com on 16 May 2008 at 1:39

GoogleCodeExporter commented 9 years ago
Итого сигнатура метода выглядит следующим 
образом:
/**
 * Content category recognition
 * @param content - Content of URL
 * @param categories - List of categories 
 * @param unsenseWords - List of unsensable words (should exclude them)
 * @param charset - Encoding of content (e.g. UTF-8, cp1251, etc)
 * @return recognizedCategory
 */
protected ContentCategory recognizeCategory(String content,List<ContentCategory>
categories, List<String> unsenseWords, String charset);

Original comment by smec...@gmail.com on 16 May 2008 at 1:44

GoogleCodeExporter commented 9 years ago
��� � ����� ��� ������� ���?

Original comment by smec...@gmail.com on 18 May 2008 at 9:32

GoogleCodeExporter commented 9 years ago

Original comment by smec...@gmail.com on 25 May 2008 at 9:24

GoogleCodeExporter commented 9 years ago
I've done it by myself, dudes :) 
I'm awesome!))

Original comment by smec...@gmail.com on 25 May 2008 at 9:25