2011-11-08 14 views
1

フリーテキストから研究所、場所、コースなどの情報を抽出できる、教育ドメイン用のテキストパーサを作成する必要があります。フリーテキストから情報を抽出する必要があります。ロケーション、コースなどの情報

は現在、私はLuceneのを通してそれをやって、次のように、手順は次のとおりです。

  1. 指数研究所、コースや場所に関連するすべてのデータ。このアプローチでは
  2. などフリーテキストの帯状疱疹を作ると場所、コースや研究所インデックスディレクトリ内の各シングルを検索して、場所を表すテキストの一部を見つけるためにしようと、もちろん

私は多くのことを行方不明ですB.techのようなケースは、btech、b-tech、b.techと書くことができます。

私はこれらのすべてのことをすることができるものがあることを知りたいと思っています。リンパイプとゲートについて聞いたことがありますが、どれくらい効率的であるか分かりません。

答えて

0

私はLuceneを使用しませんでしたが、あなたのケースでは、私は同じキーワードの異なる形をそのまま残し、リンクテーブルなどを保持します。この表では、これらの異なる形式の関係を維持しています。

0

あなたのボキャブラリの可能なフォームをカバーするために、正規表現を書く必要があるかもしれません。 ような言葉B.techは簡単に2つの異なる単語(すなわちBハイテク)に分割することができますので、

は、アナライザー/トークナイザのあなたの選択に注意してください。

0

UIMAをチェックしてください。 LingpipeとGateとして、このフレームワークはあなたがやろうとしているテキスト注釈を備えています。ここでは、UIMAのために注釈を書くのに役立ちますチュートリアルでは、次のとおりです。

http://uima.apache.org/d/uimaj-2.3.1/tutorials_and_users_guides.html#ugr.tug.aae.developing_annotator_code

UIMAはLucene integrationのための特定の一つに、addonsを持っています。

1

間違いなくGATEが必要です。 GATEには、主に2つの主な機能があります(他にも何千ものものがあります):ルール辞書です。ディクショナリ(GATEの言葉では地名辞典)は、 "B.tech"、 "btech"などの可能なすべてのケースを単一のテキストファイルに置き、GATEにそれらをすべて見つけてマークさせることができます。ルール(より正確には、JAPEルール)を使用すると、テキストでパターンを定義できます。例えば、ここではMITの郵便アドレス( "77マサチューセッツアベニュー、ビルXX、ケンブリッジMA 02139")をキャッチするパターンです:

(SP)(COMMA)
{Token.kind == number}(SP){Token.orth == uppercase}(SP){Lookup.majorType == avenue}(COMMA)(SP) 
{Token.string == "Building"}(SP){Token.kind == number}(COMMA)(SP) 
{Lookup.majorType == city}(SP){Lookup.majorType == USState}(SP){Token.kind == number} 

- マクロ(テキストだけを短くする)、{Somthing}が - です - 辞書からの値を取得する注釈(BTW、GATEには既に米国の都市などの辞書があります) - 注釈 "トークン"は "数字"(つまり、テキスト内の数字のみ) 。これは非常に簡単な例ですが、非常に複雑なケースでも簡単にカバーすることができます。

0

あなたは住所の解析ルールのhttp://code.google.com/p/graph-expression/ 例を試すことができます

GraphRegExp.Matcher Token = match("Token"); 
      GraphRegExp.Matcher Country = GraphUtils.regexp("^USA$", Token); 
      GraphRegExp.Matcher Number = GraphUtils.regexp("^\\d+$", Token); 
      GraphRegExp.Matcher StateLike = GraphUtils.regexp("^([A-Z]{2})$", Token); 
      GraphRegExp.Matcher Postoffice = seq(match("BoxPrefix"), Number); 
      GraphRegExp.Matcher Postcode = 
          mark("Postcode", seq(GraphUtils.regexp("^\\d{5}$", Token), opt(GraphUtils.regexp("^\\d{4}$", Token)))) 
        ; 
      //mark(String, Matcher) -- means creating chunk over sub matcher 
      GraphRegExp.Matcher streetAddress = mark("StreetAddress", seq(Number, times(Token, 2, 5).reluctant())); 
      //without new lines 
      streetAddress = regexpNot("\n", streetAddress); 
      GraphRegExp.Matcher City = mark("City", GraphUtils.regexp("^[A-Z]\\w+$", Token)); 

      Chunker chunker = Chunkers.pipeline(
        Chunkers.regexp("Token", "\\w+"), 
        Chunkers.regexp("BoxPrefix", "\\b(POB|PO BOX)\\b"), 
        new GraphExpChunker("Address", 
          seq(
            opt(streetAddress), 
            opt(Postoffice), 
            City, 
            StateLike, 
            Postcode, 
            Country 
          ) 
        ).setDebugString(true) 
      ); 
0
B.techはBTECH、BTECHまたはb.techのように書くことができ

のLuceneは、あなたができるようになりますfuzzy searchesである。 roam~~に注意してください)のクエリには、foamroamsのような用語があります。

これにより、さまざまなケースに合わせることができます。

関連する問題