2009-06-09 3 views
3

私は文章の中にPDFのページのオフテキストを解析しようとしていますが、それははるかに難しい、私が予想していたよりもです。ピリオドを含むが、必ずしもその文を終わらせるものではない、イニシャル、小数点、引用など、考慮すべき特別なケースがたくさんある。テキストを文章に解析しますか?

ここで誰もが、このタスクで私を助けるか、ただのアドバイスを提供できることをCまたはC++のためのNLPライブラリに精通していた場合、私は興味がありましたか?

ありがとうございました。

答えて

6

これは文境界の曖昧さ回避と呼ばれる問題です。 Wikipedia pageにはライブラリがいくつか掲載されていますが、C言語から簡単に呼び出すことができるかどうかはわかりません。

文境界曖昧さの理論については、多くの論文があります。 Unicode Standard Annex #29 - Unicode Text SegmentationのUnicode Standardでは、単純な文境界検出アルゴリズムも定義されています。

2

これは、問題を解析し、自然言語ではなく、コンピュータ言語です。それで、決して簡単な答えになることは決してありません。しかし、彼らはあなたが適用できる経験則かもしれませんし、なぜあなたがPDFを文に分割しているのか分かっていれば推薦できます。

+0

私は、「リフロー」のためにPDFを文章に分割しています。後で簡単に操作できる文章Iストリップのすべてから新しいタグ付きPDFが作成されます。 – VeePee

+0

あなたの質問は「リフローをサポートするようにPDFを変換する方法」ではありませんか?何か似たようなもの? –

+0

リフローは解決された問題ではないので、私はそれを分割して解いています。最初に適切に書式設定された文章が得られます。 – VeePee

3

Sentence boundary disambiguation(SBD)は、NLPの分野における中心的な問題です。 (それは文字列ベースのタスクのための好きな言語ではないと速度が大きな問題でない限り、)

パイプライン

全くIfは残念ながら、私が発見し、過去に使用したものはC言語ではありません可能であれば、単純なパイプラインを作成することができます。もしUnixシステムであれば、これは問題ではありませんが、Windows上でスクリプト言語を使用していても、ギャップを埋めることができます。これは、SBDは、仕事に最適なツールとなり得ることを意味し、あなたが例えば言語Z.のために見つけることができるだけではなくだけでSBDは、

./pdfconvert | SBD | my_C_tool > ... 

これは、私たちが私の仕事で物事を行う標準的な方法である、としない限り、あなたはそれがうまくいくはずだと言ったより厳しい要求を持っています。

ツールに使用できるツールに関しては

を、

  • 私の上司が自分でそれを使用するように私は、最大エントロピーモデルを使用してSBDツールですMXTERMINATORを、お勧めしたいです最近仕事。彼らによると、いくつかの文分割がありませんでしたが、それは簡単にsed scriptで修正されました。彼らは天文学の論文でSBDをやっていました。 main siteは現時点では表示されますが、利用可能なFTPミラーがありますhereです。
  • OpenNLPは、Java(JavaDoc)のMaximum Entropyモデリングを使用して、上記のアルゴリズムの再実装をしており、その背後には一見強いコミュニティがあります。
  • Sentrickおよび多くの他にも存在します。さらに多くの場合、使用可能性のある古いリストhereがあります。

モデルとトレーニング

は今、これらのツールのいくつかは、箱から出してあなたに良好な結果を与えるかもしれないが、いくつかはないかもしれません。 OpenNLPにはすぐにEnglish sentence detectionのモデルが含まれています。あなたのドメインが、ツールが訓練されたものと大きく異なる場合、それらはうまく機能しないかもしれません。例えば、彼らが新聞の文章で訓練されていれば、その仕事は非常に良いかもしれませんが、手紙では恐ろしいものです。

このように、例を挙げてSBDツールをトレーニングすることができます。それぞれのツールはこのプロセスを文書化しなければなりませんが、私はあなたに警告します、それは少しの作業かもしれません。文書X上でツールを実行し、間違った分割を手作業で修正し、正しく分割された文書Xをツールに戻して訓練する必要があります。関連する文書とツールのサイズに応じて、合理的な結果が得られるまで、1〜100の文書に対してこれを行う必要があります。

幸運にも、ご質問がありましたらお気軽にお問い合わせください。

0

私は以前と同じ要件を持っていました。私はいくつかのソリューションを試しました。そのうちの最高のものがsplitta(http://code.google.com/p/splitta/)でした。それは私がそれに投げたすべてのエッジ条件でうまくいきました。 splittaのpython。

私もsentrick(java)を試しました。 http://www.denkselbst.de/sentrick/index.html

残念ながら、私が試したすべてのオプションの完全なリストはありません。

関連する問題