Анализ текста на большой базе данных (Data Mining) - PullRequest
2 голосов
/ 14 апреля 2010

У меня есть большая база данных резюме (CV) и определенная таблица навыки , группирующие все навыки пользователей.

внутри этой таблицы есть поле skill_text , которое описывает навык в полном тексте.

Я ищу алгоритм / программное обеспечение / метод для извлечения значимых терминов / фраз из этой таблицы, чтобы построить новую таблицу со стандартизированными навыками.

Вот несколько примеров навыков, извлеченных из БД:

  • Отраслевой и конкурентный анализ
  • Развитие бизнеса (в т.ч. в международных условиях)
  • Специальная структура и программное обеспечение для проектирования дорог - Microstation, Macao, AutoCAD (базовые знания)
  • Творческая работа (Photoshop, In-Design, Illustrator)
  • проверка и отчетность о ходе кампании
  • организация и посещение мероприятий и выставок
  • Разработка: Aptana Studio, PHP, HTML, CSS, JavaScript, SQL, AJAX
  • Дисциплина: маркетинг один на один, электронный маркетинг (SEO & SEA, показ, отправка по электронной почте, партнерская программа) Смешанный маркетинг, вирусный маркетинг, маркетинг в социальных сетях.

Вывод будет примерно таким:

  • Отраслевой и конкурентный анализ
  • Развитие бизнеса
  • Специальная структура и программное обеспечение для проектирования дорог -
  • Macao
  • AutoCAD
  • Photoshop
  • In-Design
  • Illustrator
  • организация мероприятий
  • Разработка
  • Aptana Studio
  • PHP
  • HTML
  • CSS
  • JavaScript
  • SQL
  • AJAX
  • Микс маркетинг
  • Вирусный маркетинг
  • Маркетинг в социальных сетях
  • по электронной почте
  • SEO
  • Один на один маркетинг

Как видите, только навыки не остаются другим представительным текстом.

Я знаю, что это возможно, используя технику добычи текста, но как это сделать? база данных очень большая .. это хорошо, потому что мы можем вычислить частоту текста и решить, настоящий ли это навык или просто бессмысленный текст ... Большая проблема ... как определить, что "блаблабла" - это навык?

Редактировать: пожалуйста, не говорите мне использовать стандартные вещи, такие как текстовый tokinzer или regex .. потому что пользователи вводят навыки очень произвольно !!

спасибо

Ответы [ 3 ]

5 голосов
/ 14 апреля 2010

Если бы я делал это программно, я бы:

Извлечение всех данных, разделенных пунктуацией (или, возможно, только скобки и запятые) в новую таблицу (без первичного ключа, только навык), так что Creative work (Photoshop, In-Design, Illustrator) становится

 Skill            
 -------------
 Creative work    
 Photoshop        
 In-Design        
 Illustrator      

Затем, после того как вы пройдете все резюме, запросите наиболее распространенные навыки (это MySQL)

SELECT skill, COUNT(1) cnt FROM newTable GROUP BY skill ORDER BY cnt DESC;

Что может выглядеть как этот надуманный пример

 Skill            Cnt
 ---------------------
 Photoshop        3293
 Illustrator      2134
 Creative work     932
 In-Design         123

Затем вы выбираете из верхних Х умений, которые вы хотите захватить, которые должны соответствовать другим умениям (например, Indesign и In-design должны соответствовать одному и тому же умению) и какие отбросить, затем скрипт процесс с использованием карты данных.

Используйте карту данных, чтобы записать новую таблицу частоты слов (на этот раз skill_id, skill, частота), и второй раз при синтаксическом анализе данных также выполнить запись в таблицу поиска (cv_id, skill_id). После этого ваши данные будут в состоянии, в котором каждое резюме сопоставлено с количеством навыков, а каждое умение - с несколькими резюме. Вы можете запросить наиболее популярные навыки, резюме, соответствующие определенным критериям и т. Д.

0 голосов
/ 19 апреля 2010

Чтобы сделать это хорошо, нужны знания; в противном случае, что сказать «организация мероприятий» - это «навык», а «творческая работа» - нет? Но глупая программа может сделать первый шаг, проанализировав статистику словосочетаний: см. Ответы на Как извлечь общие / значимые фразы из серии текстовых записей и Алгоритмы для обнаружения фраз и ключевых слов из текста .

0 голосов
/ 14 апреля 2010

Многие базы данных сделают это за вас с помощью полнотекстового поиска. Я знаю, что полнотекстовый поиск в PostgreSQL мог бы легко сделать это с помощью специального словаря.

Кроме того, вы можете использовать PHP strtok или эквивалентный для индексации вашего текста. После индексации вы можете сравнить со словарем, или просто использовать вхождения, чтобы создать лист для себя. Облака слов сделаны аналогичным образом.

...