1

1 週間前にテキスト マイニングについていくつか質問をしましたが、少し混乱していましたが、今はやりたいことがわかりました。

状況: HTML コンテンツを含むダウンロード ページが多数あります。その一部は、たとえばブログのテキストにすることができます。それらは構造化されておらず、異なるサイトからのものです。

私がやりたいこと:すべての単語を空白で分割し、名前、番号、電話、電子メール、URL、日付、お金、温度などの事前定義された項目でそれぞれまたは単語のグループを分類したい.

私が知っていること:自然言語処理、Named Entity Reconigzer、POSTagging、NayveBayesian、HMM、トレーニング、および分類を行うための多くのことなどについての概念を知っている/聞いたことがありますが、異なる分類子を備えたいくつかの異なる NLP ライブラリがあり、これを行う方法と、何を使用するのか、何をするのかわかりません。

必要なもの:テキスト全体ではなく、テキストから各単語を個別に分類できる、分類子、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

4 に答える 4

5

Apache OpenNLPを試す必要があります。使いやすく、カスタマイズも簡単です。

ポルトガル語で実行している場合は、Amazonia Corpus を使用してプロジェクトのドキュメントにその方法に関する情報があります。サポートされているタイプは次のとおりです。

人、組織、グループ、場所、イベント、ArtProd、Abstract、Thing、Time、Numeric。

  1. OpenNLP とAmazonia Corpusをダウンロードしてください。両方を抽出し、ファイルamazonia.adapache-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. コマンド ラインから実行する (1 つの文のみを実行し、トークンを分離する必要があります):

    $ 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. 名前辞書を追加するなど、カスタム機能生成 (ドキュメントを確認) を使用して精度/再現率を向上させます。

于 2011-08-03T18:53:58.580 に答える
2

このタスクには Named 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);
}
于 2011-08-01T16:31:09.583 に答える
1

この問題は、さまざまな分野のいくつかのアイデアの交差点にあります。あなたは、名前付きエンティティの認識について言及しています。それはその1つです。ただし、おそらく、品詞のタグ付け(名詞、名前など)と情報抽出(番号、電話番号、電子メール)の組み合わせを見ているでしょう。

残念ながら、これを実行して実際の作業データで機能させるには、ある程度の努力が必要であり、これまたはそのAPIを使用するほど簡単ではありません。

于 2011-08-01T04:49:16.207 に答える
0

各データ型とそのエラーを抽出して検出するための特定の関数を作成する必要があります。

または、よく知られているオブジェクト指向の方法として。つまり、通貨を検出するために、最初または最後にドル記号をチェックし、エラーを意味する数字以外の文字が添付されているかどうかをチェックします。

あなたはすでにあなたの心で行っていることを書くべきです。ルールさえ守っていればそんなに難しくありません。ロボティクス/AI には 3 つの黄金律があります。

  1. それを分析します。
  2. 単純化する
  3. デジタル化します。

そうすれば、コンピュータと話すことができます。

于 2017-10-21T16:56:51.200 に答える