Сбор данных в базе данных MySQL - PullRequest
1 голос
/ 31 марта 2010

Начинаю с текстового майнинга. У меня есть две таблицы базы данных с тысячами данных ..

таблица для «навыков» и таблица для «категорий навыков»

  • каждый «навык» относится к категории навыков.
  • «навык» - это физическое поле varchar (200) в базе данных, где есть текст, описывающий навык.

Вот некоторые умения, извлеченные из таблицы умений:

"PHP (хороший уровень), Java (intermediaite), C ++" "PHP5" «Управление проектами и управление качеством» "начало Javascript" "Водное машиностроение" "dfsdf zerze rzer" "покупатели"

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

"PHP" "Джава" "C ++" "PHP5" "управление проектом" "управление качеством" "Javascript" "Водное машиностроение" "клиенты, работающие в сети"

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

Спасибо заранее.

Ответы [ 3 ]

0 голосов
/ 31 марта 2010

Было бы очень сложно начать с нуля,

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

И для каждой фразы я бы использовал следующий алгоритм

Скажем, у вас есть фраза из 5 слов

 "one two three four five"

сначала я бы проверил, существует ли этот в моей таблице, если это так, оставь его и, если нет, проверим

 "one two three four" and "two three four five"

и если они не совпадают, отметьте

  "one two three", "two three four", "three four five"

и т.д ...

Я знаю, что это немного грязно и долго, но это первое, что пришло мне в голову.

Надеюсь, это поможет

0 голосов
/ 31 марта 2010
<?php
$white_list = array(); // Add acceptable words and/or characters
$black_list = array(); // Add unacceptable words and/or characters

$s = '"PHP (good level), Java (intermediaite), C++" "PHP5" "project management and quality management" "begining Javascript" "water engineering" "dfsdf zerze rzer" "cibling customers"';

$words = explode(" ",$s);

$primary = array();
$secondary = array();
foreach($words as $word) {
    $new_word = trim(str_replace($black_list, "", $word));
    if (in_array($new_word,$white_list) == true) {
        $primary[] = $new_word;
    } else {
        $secondary[] = $new_word;
    }
}

$collected = '"' . implode('" "',$primary) . '"';

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

0 голосов
/ 31 марта 2010

Я бы использовал Regex для разбора каждой строки данных, сначала разделив их запятой (,), а затем удалив любой текст, заключенный в скобки, и пробелы, ведущие к этим скобкам. Что касается удаления ненужных фраз, возможно, по сравнению с принятым списком слов?

Я также заметил, что ключевое слово «И» обозначает два отдельных навыка, исходя из желаемого результата. Результаты, использующие этот метод обработки, могут быть немного схематичными из-за того, что данные не обязательно должны быть в одном и том же формате.

...