Как я классифицирую слово текста в таких вещах, как имена, число, деньги, дата и т. Д.? - PullRequest
0 голосов
/ 01 августа 2011

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

Ситуация: Iесть много страниц загрузки с содержанием HTML.Некоторые из них могут быть, например, текстом из блога.Они не структурированы и пришли с разных сайтов.

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

Что я знаю: Я знаю понятия / слышал о обработке естественного языка, Named Entity Reconigzer, POSTagging, NayveBayesian, HMM, обучение и многое другое, чтобы сделать классификацию и т. Д., Но есть некоторые разные библиотеки NLP с различными классификаторами и способами сделать это, и я не знаю, что использовать или что делать.

ЧТО МНЕ НУЖНО: Мне нужен пример кода из классификатора, НЛП, независимо от того, что может классифицировать каждое слово из текста отдельно, а не весь текст.Примерно так:

//This is pseudo-code for what I want, and not a implementation

classifier.trainFromFile("file-with-train-words.txt");
words = text.split(" ");
for(String word: words){
    classifiedWord = classifier.classify(word);
    System.out.println(classifiedWord.getType());
}

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

Ответы [ 4 ]

5 голосов
/ 03 августа 2011

Вы должны попробовать Apache OpenNLP .Это простой в использовании и настройке.

Если вы делаете это для португальского языка, есть информация о том, как это сделать, в документации по проекту с помощью Amazonia Corpus.Поддерживаемые типы:

Персона, Организация, Группа, Место, Событие, ArtProd, Аннотация, Вещи, Время и Числа.

  1. Загрузите OpenNLP и Амазония Корпус .Извлеките оба файла и скопируйте файл amazonia.ad в папку apache-opennlp-1.5.1-incubating.

  2. Выполните инструмент TokenNameFinderConverter, чтобы преобразовать корпус Amazonia в формат OpenNLP:

    bin/opennlp TokenNameFinderConverter ad -encoding ISO-8859-1 -data amazonia.ad -lang pt > corpus.txt
    
  3. Обучите вашу модель (Измените кодировку на кодировку файла corpus.txt, которая должна быть кодировкой системы по умолчанию. Эта команда может занять несколько минут):

    bin/opennlp TokenNameFinderTrainer -lang pt -encoding UTF-8 -data corpus.txt -model pt-ner.bin -cutoff 20
    
  4. Выполнение его из командной строки (Вы должны выполнить только одно предложение и токены должны быть разделены):

    $ bin/opennlp TokenNameFinder pt-ner.bin 
    Loading Token Name Finder model ... done (1,112s)
    Meu nome é João da Silva , moro no Brasil . Trabalho na Petrobras e tenho 50 anos .
    Meu nome é <START:person> João da Silva <END> , moro no <START:place> Brasil <END> . <START:abstract> Trabalho <END> na <START:abstract> Petrobras <END> e tenho <START:numeric> 50 anos <END> .
    
  5. Выполнение его с помощью API:

    InputStream modelIn = new FileInputStream("pt-ner.bin");
    
    try {
      TokenNameFinderModel model = new TokenNameFinderModel(modelIn);
    }
    catch (IOException e) {
      e.printStackTrace();
    }
    finally {
      if (modelIn != null) {
        try {
           modelIn.close();
        }
        catch (IOException e) {
        }
      }
    }
    
    // load the name finder
    NameFinderME nameFinder = new NameFinderME(model);
    
    // pass the token array to the name finder
    String[] toks = {"Meu","nome","é","João","da","Silva",",","moro","no","Brasil",".","Trabalho","na","Petrobras","e","tenho","50","anos","."};
    
    // the Span objects will show the start and end of each name, also the type
    Span[] nameSpans = nameFinder.find(toks);
    
  6. Для оценки вашей модели вы можете использовать 10-кратную перекрестную проверку: (доступно только в 1.5.2-INCUBATOR, чтобы использовать ее сегодня, вам нужно использовать соединительную линию SVN) (может потребоватьсянесколько часов)

    bin/opennlp TokenNameFinderCrossValidator -lang pt -encoding UTF-8 -data corpus.txt -cutoff 20
    
  7. Повышение точности / отзыва с помощью создания пользовательских функций (см. документацию), например, путем добавления словаря имен.

2 голосов
/ 01 августа 2011

Для этой задачи вы можете использовать подход Recognizer Entity Recognizer (NER), я настоятельно рекомендую вам взглянуть на страницу Stanford Core NLP и использовать функциональность ner в модулях для вашего задача. Вы можете разбить свои предложения на токены и затем передать их в систему NER Стэнфорда. Я думаю, что на странице Stanford Core NLP есть много примеров, которые могут вам помочь, пожалуйста, дайте мне знать, если вам нужен игрушечный код.

Вот пример кода, это всего лишь фрагмент всего кода:

// creates a StanfordCoreNLP object, with NER
    Properties props = new Properties();
    props.put("annotators", "ner");
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

classifier.trainFromFile("file-with-train-words.txt");
words = text.split(" ");
for(String word: words){
     Annotation document = new Annotation(word);
     pipeline.annotate(document);
     System.out.println(Annotation);
}
1 голос
/ 01 августа 2011

Эта проблема находится на пересечении нескольких идей из разных областей.Вы упоминаете признание именованного объекта, то есть одно.Однако вы, вероятно, смотрите на смесь части речевого тегирования (для существительных, имен и т. П.) И извлечения информации (для чисел, телефонных номеров, электронных писем).

К сожалению, чтобы сделать это и заставить его работать с реальными рабочими данными, потребуется некоторое усилие, и это не так просто, как использовать тот или иной API.

0 голосов
/ 21 октября 2017

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

Или как хорошо известно название объекта ориентированного способа. То есть для определения валюты мы проверяем наличие знака доллара в начале или конце и проверяем, есть ли присоединенные нечисловые символы, что означает ошибку.

Вы должны написать, что вы уже делаете со своим умом. Это не так сложно, если вы будете следовать правилам. В робототехнике / искусственном интеллекте есть 3 золотых правила:

  1. проанализируйте его.
  2. упростить это
  3. оцифруйте его.

Таким образом, вы можете общаться с компьютерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...