ご教示お願い致します。
$str = 'テストが赤点だった→結果30点;
foreach $ch (split //, $str) {
print $ch, "\n";
}
上記変数を1文字ずつばらいており、
そこから、さまざまなパターンでくっつけ
あるテキストから似た部類のタイトルを探したいです。
あるテキスト→test.txt
---------------------------
明日はテスト
テスト合格
クラブ活動;;
試験・・・
赤点多すぎな件
打ち上げパーティー
100点!!
---------------------------
このテキストファイルで
$ch で生成された文字でヒットされるのは
---------------------------
明日はテスト
テスト合格
赤点多すぎな件
100点!!
---------------------------
このような結果がほしいのです
どのようにすれば、実行できますでしょうか?
A 回答 (9件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
$strのn-gramを求めて、test.txtの各行と比較してマッチした行を結果出力すれば良いと思います。
1-gram 「テ」「ス」「ト」「が」……「点」
2-gram 「テス」「スト」「トが」……「赤点」……「0点」
3-gram 「テスト」「ストが」「トが赤」「が赤点」……「30点」
御回答ありがとうございます。
もう少しで解決できそうです。
もう1つ教えてくださいm(_ _)m
my $str = "テストが赤点だった→結果30点";
my $retval = ConvertNGram($str, 2);
my @list = split(/\n/, $retval);
my $length = @list;
open(FILE, "<","test.txt") or die("error :$!");
eval{ flock(FILE, 1) };
my @KIJI = <FILE>;
close FILE;
my @AAA;
for(my $i=0;$i<=$length;$i++){
my $data = $list[$i];
chomp($data);
@AAA = grep(/$data/, @KIJI);
}
open(FILE, ">","vvv.txt") or die("error :$!");
eval{ flock(FILE, 2) };
print FILE @AAA;
close FILE;
sub ConvertNGram {
my $str = shift;
my $n = shift;
my $wsp = '';
$n=2 if (!$n || $n !~ /^[0-9]+$/);
$str =~ s/\n|\t| |$wsp//g;
my $slen = length($str);
return $str if $slen <= $n;
my @parts = ();
for(my $i=0; $i < $slen-$n+1; $i++){
push(@parts, substr($str, $i, $n));
}
return join("\n", @parts);
}
現在ここまでできました。
$retval→2文字ずつ分割
@list→分割した数
それらを用いて
forでまわし
@AAA = grep(/$data/, @KIJI);
このように、ここで旨いこといきません...
$dataを普通に文字にすると...
/$data/ → /テス/ に変えると
明日はテスト
テスト合格
この2つを取得できます。
しかし,$dataですと、全て取得してしまっています。なぜでしょうか・・・?
No.4
- 回答日時:
my $length = @list;
の結果 $length には @list の「何」が入りますか? そして, それを使って
for(my $i=0;$i<=$length;$i++)
のように forループを回していいですか?
あと
・そもそも添え字は必要なのか
・なぜ return するときに join するのか
という突っ込みもあるかな.
@listには
テス
スト
トが
が赤
赤点
点だ
だっ
った
た→
→結
結果
果3
30
0点
これが入って、これの行数14が
$lengthに入ります・・・
そして、その分を
test.txtをオープンさせ
for(my $i=0;$i<=$length;$i++){
@BBB = grep(/$data/, @KIJI);
}
grepという風にしようとしている・・・
わからない・・・
No.5
- 回答日時:
14個の要素を持つ配列の添え字として使っていいのはどこからどこまで?
No.9
- 回答日時:
あれ? 「添え字」はだいたいあってる. 正確には [] の中の式なんだけど.
ではそれに基づいて, 改めて #7 のやりとりを見てください.
「添え字でいうとどこからどこまで?」に対してあなたは「テスから0点です!」と書いています. これは, あなたが「テス」とか「0点」とかを「添え字」と認識していたことを意味するはずです.
一方 #1 に対して書いたプログラムでは
for(my $i=0;$i<=$length;$i++)
で動かしている $i を使って
my $data = $list[$i];
と書いています.
矛盾してませんか?
もう 1度確認してみよう.
「1個目から14個目まで」は, 添え字でいうとどこからどこまで?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 高校 こんな事を言ってる暇があったら勉強しろってはわかってるんですが。私は高校三年生で今高校3年間の最後の 3 2022/11/29 13:14
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- 高校受験 成績について 2 2022/10/26 10:18
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- 統計学 テストの順位についてです 今回のテストの順位を知りたいのですが、できますでしょうか?今回は僕の学年は 4 2022/11/30 19:15
- その他(悩み相談・人生相談) 今絶対絶命のピンチで、とても悩んでることがあります。 それはあと2日後に、卒業がかかってるテストがあ 2 2023/08/07 01:12
- 高校受験 高校入試で点数を上げたいです!! 5 2022/09/20 23:32
- 大学受験 高校3年生です。大学入試についてです。 受験科目は英語100、国語100、面接50の計250点です。 3 2022/08/11 17:31
- 学校 怖い 3 2023/03/03 18:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pythonの再帰関数の動作の流れ...
-
どのようなプログラムをつくれ...
-
配列のサイズを動的に拡張
-
batファイルでrenameができませ...
-
エラー 'dir.h' : No such fi...
-
HTMLのフォームで画像と文...
-
ExcelをCSV書き出す場合のシー...
-
awkスクリプトでダブルクォーテ...
-
Perlの変数に文字数制限(容量...
-
readdir()で得られるファイル・...
-
ファイル全てを .xlsm に変更し...
-
while(<ハンドラ>) {} で行数を...
-
パスから最後のディレクトリだ...
-
テキストデータから指定した1...
-
一定時間が経過したフォルダの削除
-
htaccessで特定のディレクトリ...
-
ReadLineでの読み出し行を指定する
-
1行がやたら長いテキストをバッ...
-
while文がうまく動かない
-
chdirがうまくできない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の中に重複文字列があるか...
-
C言語のバイナリモードでのfsca...
-
データの日付でソートをしたい
-
perlで複数行のデータを自由に...
-
perl-cgi 文字の長さでソートし...
-
Visual C++を用いたシリアル通信
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
window.open でのファイル指定方法
-
VBAで巨大なファイルの途中から...
-
Perlで特定行から特定行までを...
-
ReadLineでの読み出し行を指定する
-
エクセルVBAで素数だけを出力す...
おすすめ情報