3

私は多くの pdf-->text メソッドを使用して、pdf ドキュメントからテキストを抽出しました。私が持っている特定の種類の PDF については、pyPDF も pdfMiner もテキストをうまく抽出できません。ただし、http://www.convertpdftotext.net/は(ほぼ)完全にそれを行います。

使用している pdf に透明なテキストが含まれており、他のテキストにマージされていることがわかりました。

返されるテキスト ブロックの例を次に示します。

12324  35th Ed. 01-MAR-12 Last LNM: 14/12 NAD 83 14/12          Corrective             Object of Corrective                                                                                                                   
ChartTitle: Intracoastal Waterway Sandy Hook to Little Egg Harbor Position  
            C HAActRionT    N  Y  -NJ   - S A  N  D Y    H OO    K  ATcO tionLI T TLE EGG HARBOR.  Page/Side: N/A 
(Temp) indicates that the chart correction action is temporary in nature.  Courses and bearings are givCGenD 0in 1 degrees clockwise from 000 true.       
 Bearings RoEf LlighOCtAT seEc tors aSrehre towwsbuardry th Re ivligher Ct fhroanmn seel Lawighartde.d  B Theuoy  5no minal range of lights is expressedf roin mna 4u0tic-24al -mi46les.56 0(NNM ) unless othe0r7w4is-00e n-o05te.d8.8 0 W 
to     40-24-48.585N 074-00-05.967W 

12352 33rd Ed. 01-MAR-11 Last LNM: 03/12 NAD 83 04/12 . . l . . . . Corrective Object of Corrective ChartTitle: Shinnecock Bay to East Rockaway Inlet Position C HAActRionT S H IN N E C OC K B A Y TO AcEtionAS T ROCKAWAY INLET. Page/Side: N/A (Temp) indicates that the chart correction action is temporary in nature. Courses and bearings are givCGenD 0in 1 degrees clockwise from 000 true. (BTeeamringp) s DoEf LlighETtE s ectors aSretat toew Baoratd Ctheh anlighnet lf Droaym beseacoawanr 3d. The nominal range of lights is expressedf roin mna 4u0tic-37al -mi11les.52 0(NNM ) unless othe0r7w3is-29e n-5o3te.d76. 0 W

そして、「ゴーストテキスト」は常に次のとおりであることを発見しました。

 Corrective             Object of Corrective              Position
    Action                         Action

(Temp) は、チャート修正アクションが一時的なものであることを示します。コースと方角は、000 から時計回りに角度で表示されます。
光セクターの方位は、海側からの光に向かっています。特に明記されていない限り、ライトの公称範囲は海里 (NM) で表されます。

私が投稿した2番目の例では、必要なテキスト(ゴーストテキストを削除したもの)は次のとおりです。

12352 33rd Ed. 01-Mar-11 Last LNM:03/12 NAD 83 04/12
Chart Title:Shinnecock Bay to East Rockaway Inlet. Page/Side:N/A 
CGD01
(Temp) DELETE State Boat Channel Daybeacon 3 from 40-37-11.520N 073-29-53.760W

この問題はドキュメントごとに 1 回だけ発生し、完全に一貫しているようには見えません (上記のように)。ウィザードの 1 人が、Python を使用してゴースト化されたテキストを削除する方法を考えられるかどうか疑問に思っています (必要ない/したくない)。pyPDF を使用していた場合、テキストへの変換中に正規表現を使用してそれを切り取っていたでしょう。残念ながら、私は上記の Web サイトのテキスト ファイルから始めているため、既に被害を受けています。私は少し途方に暮れています。

読んでくれてありがとう。

編集: この問題の解決策は、アプリケーションの残りの部分よりも複雑に見えるので、助けを求めるリクエストを撤回します。

貢献してくださった方々の考えにとても感謝しています。

4

2 に答える 2

1

ゴースト テキストが一見予測不可能な方法で分割される可能性があることを考えると、偽陽性を起こさずにゴースト テキストを自動的に削除する簡単な方法はないと思います。必要なのは、ほぼ人間レベルのパターン認識です。:-)

あなたが試みることができるのは、これらの種類のメッセージのフォーマットを悪用することです. だいたい;

<number> <number>[rn]d Ed. <date> Last LNM:<mm>/<yy> NAD <date2>
Chart Title:<text>. Page/Side:<N/A or number(s)> CGD<number> <text>
<position>

これを使用して、予測可能な要素から無意味なものを抜き出すことができます。次に、チャート名 (「シネコック湾からイースト ロックアウェイ インレット」) と説明的な単語 (「州」、「ボート」、「デイビーコン」など) のリストがあれば、 2 つのテキスト ブロック内の壊れた単語と単語リスト内の単語の間の最小のレーベンシュタイン距離を見つけることで、元の単語を再構築できる場合があります。

popplerソフトウェアをインストールできる場合は、元の PDF のフォーマットを可能な限り維持するオプションをpdftotext試して使用することができます。-layoutそれはあなたの問題を解消するかもしれません。

于 2012-04-22T17:14:32.510 に答える
1

パターン「修正位置アクションの修正オブジェクト...」をマングルされたテキストに含めることができるすべての可能な方法を再帰的に見つけることができます。

次に、これらの可能なパスのそれぞれのテキストを解読し、何らかのスペル チェックを実行して、スペル ミスが最も少ないパスを選択します。または、各部分文字列が表示される場所が大まかにわかっているため、それをヒューリスティックとして使用できます。または、単に最初のパスを使用することもできます。

いくつかの疑似コード (テストされていません):

 def findPaths(mangledText, pattern, path)
      if len(pattern)==0:  # end of pattern
           return [path]
      else:
           nextLetter= pattern[0]
           locations = findAllOccurences (mangledText, nextLetter) # get all indices in mangledText that contain nextLetter
           allPaths = []
           for loc in locations:
               paths = findPaths( mangledText[loc+1:], pattern[1:], path + (loc,) )
               allPaths.Extend(paths)
           return allPaths # if no locations for the next letters exist, allPaths will be emtpy

次に、このように呼び出すことができます (必要に応じて、検索パターンからすべてのスペースを削除します。マングルされたテキストにそれらがすべて含まれていることが確実でない限り)

  allPossiblePaths = findPaths ( YourMangledText, "Corrective Object...", () )

allPossiblePaths には、マングルされたテキストにパターンを含めることができるすべての可能な方法のリストが含まれている必要があります。各エントリは、パターンと同じ長さのタプルであり、検索テキスト内でパターンの対応する文字が出現するインデックスが含まれています。

于 2012-04-22T20:02:54.290 に答える