質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

3回答

1257閲覧

perlによる文字変換スクリプト

milco

総合スコア20

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2017/05/16 03:15

漢字かな混じりの文章ファイルと、単語とその読みを記載したファイルの2つを用いて文章を全てひらがなに変換するスクリプトを作成したいと考えているのですが、上手くいく方法が思い浮かばず困っております。
ファイル例としては、
文章ファイル(単語毎にスペースで区切られた文章):
今年 も 春 が 来た 。

単語ファイル:
今年 ことし
去年 きょねん
春 はる
夏 なつ
来た きた

このような2つのテキストデータを用意して、文章ファイル内の文を
今年 も 春 が 来た 。→ことし も はる が きた 。
といった様に変換するのが目的です。
単語ファイルをsplit等で配列に格納し、配列[0]に対応する単語が文章中に見つかった場合、配列[1]のかな表記に置き換えることは出来ないものかと考えています。
ご教授の程よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2017/05/16 04:40

まさか全部作ってくれということでは無いと思いますが、どの部分がわからないのですか?
milco

2017/05/16 04:57

ご回答ありがとう御座います。splitで単語とその読みをそれぞれ配列に格納し、文章内の単語を各行の配列[0]と照らし合わせ、一致した場合配列[1]のかな表記に置換するスクリプトを囲うと考えているのですが、その部分のアルゴリズムをどう書けばよいか悩んでおります。
Zuishin

2017/05/16 04:59

その前にまずはファイルを読まなければなりません。その部分を実装して質問に追記してください。
Zuishin

2017/05/16 05:00

あと、配列ではなく単語をキーとしたハッシュがいいと思います。
guest

回答3

0

なんか、こんな感じですかね?

perl

1 2# 置換対象文字列 3my $text = '今年も春が来たんだぜ。'; 4 5print $text."\n"; 6 7 8open(FILE, "word.txt"); 9while ( my $line = <FILE> ){ 10 # 最後の改行文字の削除 11 chomp($line); 12 13 # 半角スペースでsplit 14 my @sp = split(/ /, $line); 15 16 # 置換 17 $text =~ s/$sp[0]/$sp[1]/g; 18} 19close(FILE); 20 21print $text."\n"; 22

word.txt

1今年 ことし 2去年 きょねん 3春 はる 4夏 なつ 5来た きた

投稿2017/05/16 05:39

nnahito

総合スコア2004

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ハッシュを使ってみました
tango.txt と bun.txt

perl

1my $inf="tango.txt"; 2open (IN, $inf) or die "$!"; 3while (<IN>) { 4 chomp; 5 my ($key, $item) = split(/ /, $_); 6 $tango{$key} = $item; 7} 8close(IN); 9 10$inf="bun.txt"; 11open (IN, $inf) or die "$!"; 12while (<IN>) { 13 chomp; 14 my @items = split(/ /, $_); 15 foreach my $val(@items){ 16 $val = exists($tango{$val}) ? $tango{$val} : $val; 17 print "$val "; 18 } 19 print "\n"; 20} 21close(IN);

投稿2017/05/16 08:22

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

日本語は英語などと違って単語ごとに区切る事が難しいですが、形態素解析という方法で分析する事が出来るようです。
Perlで綺麗に形態素解析をやるを参考にするとなんとかなるのではないでしょうか?

投稿2017/05/16 03:30

yoorwm

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

milco

2017/05/16 03:57

ご回答ありがとう御座います! 説明が不足しておりました。既に単語区切りの完了した日本語文について、単語ファイル内に対応する単語があった場合、それを同じ行にスペース刻みで記載された平仮名に変換する、という動作を実装したいと考えています。
yoorwm

2017/05/16 04:15

それだけでしたら、標準関数のstr_replaceが使えると思います。
yoorwm

2017/05/16 04:17

っと、すいません。PHPと勘違いしていました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問