入力ファイルは UTF8 エンコーディングで、各行の構造は次のとおりです。
C\tTEXT\n
ここで、C はドキュメントのクラス (複数の文字)、\t
はタブ、TEXT は一連の文字、\n
は改行文字です。
各 TEXT から、HTML タグおよび同様のタグ、エンティティ、文字以外の文字が削除され、各テキストは一連の単語に変換されます。順序は重要ではありません。
各 TEXT から、ベクトルが作成されます。ベクトルの個々の要素 (属性) は、テキスト コレクション内の単語に対応し、ベクトル内の値は、TEXT 内の単語の出現に依存します。これらの値には、次の 2 つのタイプがあります。
A - number of occurrences of words (1 or 0)
B - number of occurrences of words (0 or more)
最後の値ベクトルはドキュメントのクラスです。
必要に応じて、頻度が低い単語 (たとえば、1 つ) をすべてのテキストから削除することができます。
文字数の少ない単語も削除できます。
Example input file:
CLASS One Class One
CLASS One Two
2CLASS two three
CLAS12 three
出力ファイルの例:
これらはスクリプトのパラメーターです (最小単語長 = 1、単語の最小出現数 = 1、A)
出力:
one two three
CLASS 2 0 0
CLASS 1 1 0
2CLASS 0 1 1
CLAS12 0 0 1
私の現在のコード:
私を助けてください。
#!/usr/bin/perl
use strict;
use encoding 'UTF-8';
use Data::Dumper;
my %vector = ();
my @vectors = ();
my ($string,$word);
open SOURCE, "<:encoding(UTF-8)", "source.txt" or die "File does not exist $!\n";
my($class,$hodnota);
while (my $line = <SOURCE>) {
if($line=~ /^(\w+)\t(.+)\n/){
$string =$2; $class = $1;
$string=~ s/[^a-zA-Z ]//g;
for $word ( split " +", $string )
{
$vector{$word}++;
}
$vector{"class"} = $class;
push(@vectors, %vector)
}
}
close S;
print Dumper( \@vectors );