カスタム単語リストの作成

カスタム単語リストの作成

スペルチェックやOCRなどの目的で、pdf形式の科学論文のコレクションに基づいてカスタム(科学)単語リストを作成したいと思います。を使用すると、pdftotext私の科学分野に必要な単語を含むテキストファイルを簡単に作成できます。しかし、ファイルは汚染されます。

  • 非科学関連語(一般辞書にも含まれる)
  • 不適切な数式変換による単語(特殊文字などを含む単語を含む)

個々の単語の長さが最小で、特殊文字は含まれておらず、リストに複数回表示する必要があり、後者を削除したいと思います。第二に、第二の単語リストと比較して電子を削除したいと思います。私の質問:

これはあなたにとって良い計画のように聞こえますか?これを行うための既存のツールはありますか?あなたは何をしますか?

答え1

5回以上見つかったが、現在のディレクトリのPDFファイルにある/usr/share/dict/wordsにない4文字以上の単語を選択します。

 find . -name '*.pdf' -exec pdftotext {} - \; |
   tr -cs '[:alpha:]' '[\n*]' |
   tr '[:upper:]' '[:lower:]' |
   grep -E '.{4}' |
   sort |
   uniq -c |
   awk '$1 > 4 {print $2}' |
   comm -23 - <(tr '[:upper:]' '[:lower:]' < /usr/share/dict/words|sort -u)

kshプロセス置換(、zshまたは)をサポートするシェルが必要ですbash

とにかく使用したい場合は、次のサイトperlですべての作業を実行できますperl

find . -name '*.pdf' -exec pdftotext {} - \; |
  perl '-Mopen ":locale"' -nle '
     s/^\S+//;s/\S+$//;y/ \t/ /s;
     next unless length > 40;
     $w{lc$_}++ for /[[:alpha:]]{4,}/g;
     END{open W,"</usr/share/dict/words";
     while(<W>){chomp;delete $w{lc$_}};
     print for grep {$w{$_}>4} keys %w}'

答え2

かなり典型的な計画のように聞こえます。これを行うには、シェルスクリプトを使用します。大量のテキストを扱わないため、パフォーマンスが適切である必要があり、シェルスクリプトを簡単に作成して再実行できます。私の最初のクリップは次のスクリプトでした。

pdf2text files |
tr -cs '[A-Za-z]' '\n' |  
tr '[A-Z]' '[a-z]' |
awk '{ if (length > 6) {print $1;}}' |
fgrep -v -f /usr/share/groff/current/eign |
sort | 
uniq -c |
awk '{print $2, $1}' |
sort -nr +1 -2 |
head -20

長さが6より大きい場合、最も一般的な20の単語が提供されます。

ステップを追加し、ステップを削除し、パラメータを調整し、結果を確認できます。

このfgrepステップは唯一の奇妙なステップであり、以下が必要です。GNUトロブインストールされています。 /usr/share/groff/current/eignファイルは、英語で最も頻繁に使用される100語に似ています。 「-v」フラグは「eign」ファイルに表示されない単語のみを渡すため、「eign」を停止リストとして使用します。 GNU troffが一般的な単語として使用されることを気に入らない場合は、独自のファイルを作成してfgrepこの段階で使用できます。

関連情報