テキストから高頻度の英単語を削除できると思います。キーワードとは、テキスト (タグ) の内容を最も特徴付ける単語を抽出したいということです。完璧である必要はありません。適切な近似が私のニーズに最適です。
誰かがそのようなことをしたことがありますか?それを行うPerlまたはPythonライブラリを知っていますか?
Lingua::EN::Tagger はまさに私が求めたものですが、フランス語のテキストでも機能するライブラリが必要でした。
「頻度の高い英単語」の名前はストップワードで、たくさんのリストがあります。私はpythonまたはperlライブラリを認識していませんが、バイナリツリーまたはハッシュでストップワードリストをエンコードできます(またはpythonのfrozensetを使用できます)。入力テキストから各単語を読み取るときに、それがあなたの「ストップリスト」に入れ、それを除外します。
ストップ ワードを削除した後、結果のテキストを正規化するためにステミングを実行し (複数形、-ings、-eds を削除)、重複する「キーワード」をすべて削除する必要があることに注意してください。
迅速かつ簡単な解決策として、perl モジュールLingua::EN::Taggerを使用してみることができます。
より複雑なモジュールLingua::EN::Semtags::Engineは、Lingua::EN::Tagger を WordNet データベースと共に使用して、より構造化された出力を取得します。どちらも使い方はとても簡単です。CPAN のドキュメントをチェックするか、モジュールをインストールした後に perldoc を使用してください。
テキストで最も頻繁に使用される単語を見つけるには、次のようにします。
#!/usr/bin/perl -w
use strict;
use warnings 'all';
# Read the text:
open my $ifh, '<', 'text.txt'
or die "Cannot open file: $!";
local $/;
my $text = <$ifh>;
# Find all the words, and count how many times they appear:
my %words = ( );
map { $words{$_}++ }
grep { length > 1 && $_ =~ m/^[\@a-z-']+$/i }
map { s/[",\.]//g; $_ }
split /\s/, $text;
print "Words, sorted by frequency:\n";
my (@data_line);
format FMT =
@<<<<<<<<<<<<<<<<<<<<<<... @########
@data_line
.
local $~ = 'FMT';
# Sort them by frequency:
map { @data_line = ($_, $words{$_}); write(); }
sort { $words{$b} <=> $words{$a} }
grep { $words{$_} > 2 }
keys(%words);
出力例は次のようになります。
john@ubuntu-pc1:~/Desktop$ perl frequency.pl
Words, sorted by frequency:
for 32
Jan 27
am 26
of 21
your 21
to 18
in 17
the 17
Get 13
you 13
OTRS 11
today 11
PSM 10
Card 10
me 9
on 9
and 9
Offline 9
with 9
Invited 9
Black 8
get 8
Web 7
Starred 7
All 7
View 7
Obama 7
Perl にはLingua::EN::Keywordsがあります。
あなたが望むことをする最も簡単な方法はこれです...
>>> text = "これはサンプル テキストの一部です" >>> words = [set(text.split(" ")) if len(word) > 3 内の単語の単語] >>> 言葉 ['this', 'some', 'sample', 'text']
これを行う標準モジュールを私は知りませんが、3 文字の単語の制限を一連の一般的な英単語の検索に置き換えることは難しくありません。
ワンライナーソリューション(2回以上発生した2文字を超える単語):
perl -ne'$h{$1}++while m/\b(\w{3,})\b/g}{printf"%-20s %5d\n",$_,$h{$_}for sort{$h{$b}<=>$h{$a}}grep{$h{$_}>2}keys%h'
編集:同じ頻度の単語をアルファベット順に並べ替えたい場合は、この拡張されたものを使用できます:
perl -ne'$h{$1}++while m/\b(\w{3,})\b/g}{printf"%-20s %5d\n",$_,$h{$_}for sort{$h{$b}<=>$h{$a}or$a cmp$b}grep{$h{$_}>2}keys%h'
シンプルさを維持する最も正確な方法は、ソース内の単語の頻度を数え、一般的な英語 (または他の言語) の使用頻度に従って重み付けすることだと思います。
「コーヒーハウス」のように頻繁に使用されない単語は、「犬」のように頻繁に使用される単語よりもキーワードである可能性が高くなります。それでも、ソースが「犬」を 500 回、「コーヒーハウス」を 2 回言及している場合は、「犬」が一般的な単語であってもキーワードである可能性が高くなります。
重み付けスキームを決定するのは難しい部分です。