アプリ版:「スタンプのみでお礼する」機能のリリースについて

恐れ入ります。
Perlのデキスト操作で、

文字列を順不同に比較して一致率をみることはできるでしょうか。
例えば、123456 654321を比較した場合、一致率は100%
162534と234651も一致率100%という感じです。

この比較をカタカナ標記の文字列で行いたいと思っています。

よろしくお願いします。

A 回答 (4件)

> perlのバージョンは 5.8.8


> プログラムの文字コードは EUC-JP
> ファイルの文字コードも EUC-JP

使われている文字コードが EUC-JP の場合は、次のように変更してみてください。

my $data1 = decode 'euc-jp', 'アイウエオカキクケコ';
my $data2 = decode 'euc-jp', 'カキクケコサシスセソ';

decode の第1引数は、第2引数で指定した文字列の文字コードです。decode すると、文字列はいわゆる「Perl 内部文字列」になります。なお、「Perl 内部文字列」を外側 (コンソール、ファイルなど) に出力する場合は、(やり方はいろいろあるのですが) 一例としては次のようにします。

print encode('euc-jp', $data1), "\n";
    • good
    • 0

Perl で日本語文字列を扱うのは非常に厄介で、プログラミングしている環境を理解していることが重要です。



・Perl のバージョン
・プログラムの文字コード
・ファイルの文字コード

以下のコード例は、Perl のバージョン 5.8.x 以降で、プログラムを UTF-8 で書いています。

use strict;
use warnings;
use Encode;

my $data1 = decode 'utf8', 'アイウエオカキクケコ';
my $data2 = decode 'utf8', 'カキクケコサシスセソ';
$data2 =~ s/\Q$_// foreach split //, $data1;
printf "%.1f%%\n", (length($data1) - length($data2)) * 100 / length($data1);

この回答への補足

ありがとうございます。
perlのバージョンは 5.8.8
プログラムの文字コードは EUC-JP
ファイルの文字コードも EUC-JP
です。

ご返答いただいたプログラムを試してみます。

補足日時:2013/06/19 17:27
    • good
    • 0
この回答へのお礼

ありがとうございます。大変参考になりました。

お礼日時:2014/09/27 13:46

セオリーとしてはハッシュで数えるんだろうなぁ. 例えば


my %count1 = ();
my @distinct_chars = grep ! $count1{$_}++, split // $line1;
とか.

この回答への補足

恐れ入ります。初心者の為、苦戦しています。
現在やろうとしていることは、
データが2つあり、その比較を行う作業です。
エクセルでvlookupであいまい検索をしても、
一致しない箇所がデータによってマチマチなので、
perlでデータどうしの一致率で比較ができないかと思い、悪戦苦闘しています。


data1.csv と、data2.csvの、
1列目どうしを比較して、一致率の高いデータを抜き出したいのです。

data1とdata2のレコードの並び順は一致しません。

よろしくお願いします。

補足日時:2013/06/17 16:47
    • good
    • 0

文字ごとに「その文字が何回出てくるか」を数えればいいだけじゃないか?

この回答への補足

恐れ入ります。
その辺を詳しく知りたいのですが、どのようにしたらよいでしょうか。

補足日時:2013/06/14 15:30
    • good
    • 0
この回答へのお礼

ありがとうございます。大変参考になりました。

お礼日時:2014/09/27 13:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!