Download presentation
Presentation is loading. Please wait.
Published byあゆみ もちやま Modified 約 8 年前
1
コーパス言語学実践 2006 年度 2 学期 第 9 回
2
2 本日の内容 これまでと同様の作業 – プログラムで処理するケースの紹介
3
3 perl のプログラム( 1 ) 述べ語数で各品詞の語数を計算する wc_nobe.pl perl wc_nobe.pl < gingatetsudono_yoru08.txt
4
4 perl のプログラム( 2 ) 異なり語数で各品詞の語数を計算する wc_kotonari.pl perl wc_kotonari.pl < gingatetsudono_yoru08.txt
5
5 プログラムを理解するヒント ( 1 ) split 関数 連想配列 foreach という構文
6
6 split 関数補足( 1 ) split 関数と配列の関係 split 関数は第1引数で指定した区切り子 (文字列)で,第2引数で指定した文字 列の中身を区切り,その結果を配列に代 入する @a = split(/ ☆ /, $line);
7
7 split 関数の補足( 2 ) 例: @a = split(/ ☆ /, $line); $line=” サラダ☆ 380 ☆ レタス, ツナ, ブロッコリー, ドレッシング, たまねぎ ☆ 260”; だとすると
8
8 split 関数の補足( 3 ) 例: @a = split(/ ☆ /, ” サラダ☆ 380 ☆ レタス, ツナ, ブロッコリー, ドレッシング, たまねぎ ☆ 260”); こんな感じで, 区切り子は「☆」ということになります.
9
9 split 関数の補足( 4 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 split 関数では,指定された文字列の中に 区切り文字があるかどうか先頭から探します. @a = split(/ ☆ /, $line);
10
10 split 関数の補足( 5 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 ありました! @a = split(/ ☆ /, $line);
11
11 split 関数の補足( 6 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 ここまでの値を 配列に入れます @a = split(/ ☆ /, $line); サラダ 0 @a
12
12 split 関数の補足( 7 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 探索を続けます @a = split(/ ☆ /, $line); サラダ 0 @a
13
13 split 関数の補足( 8 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 見つかりました! @a = split(/ ☆ /, $line); サラダ 0 @a
14
14 split 関数の補足( 9 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 ここまでを 代入します @a = split(/ ☆ /, $line); サラダ 0 @a 380 1
15
15 split 関数の補足( 10 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 続けます. @a = split(/ ☆ /, $line); サラダ 0 @a 380 1
16
16 split 関数の補足( 11 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 見つかりました. @a = split(/ ☆ /, $line); サラダ 0 @a 380 1
17
17 split 関数の補足( 12 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 ここまでを 代入します. @a = split(/ ☆ /, $line); サラダ 0 @a 380 1 レタス, ツナ, ブロッコ リー, ドレッシング, たまねぎ 2
18
18 split 関数の補足( 13 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 続けます. @a = split(/ ☆ /, $line); サラダ 0 @a 380 1 レタス, ツナ, ブロッコ リー, ドレッシング, たまねぎ 2
19
19 split 関数の補足( 14 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 文字列の最後まで きました. @a = split(/ ☆ /, $line); サラダ 0 @a 380 1 レタス, ツナ, ブロッコ リー, ドレッシング, たまねぎ 2
20
20 split 関数の補足( 15 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 ここまでを 代入します. @a = split(/ ☆ /, $line); サラダ 0 @a 380 1 レタス, ツナ, ブロッコ リー, ドレッシング, たまねぎ 2 260 3
21
21 split 関数の補足( 16 ) split 関数では サラダ☆ 380 ☆レタス, ツナ, ブロッコリー, ドレッ シング, たまねぎ☆ 260 これで split 関数の 作業が完了です @a = split(/ ☆ /, $line); サラダ 0 @a 380 1 レタス, ツナ, ブロッコ リー, ドレッシング, たまねぎ 2 260 3
22
22 split 関数の補足( 17 ) while(<>) { chomp; @a = split(/\t/, $_); print(“$a[0] - $a[1] - $a[2] - $a[3]\n”); } exit; splittest.pl として保存 perl splittest.pl < gingatetsudono_yoru08.txt
23
23 連想配列(1) perl には,連想配列と呼ばれる配列がある. 特徴:添え字に文字列が使える – 連想配列には%に続けて名前をつける. 例:% array という連想配列 要素 ( 中 身) 添え字 (インデック ス) $array{“ 松 ”}=2000; $array{“ 竹 ”}=1500; $array{“ 梅 ”}=1000; 上松松竹梅 3000200015001000 $array{“ 上松 ”}=3000;
24
24 連想配列( 2 ) 連想配列の使い方(参照) – 各要素を個別に参照 print “ 上松の中身は ”. $a{“ 上松 ”}. “\n”; print “ 松の中身は ”. $a{“ 松 ”}. “\n”; print “ 竹の中身は ”. $a{“ 竹 ”}. “\n”; print “ 梅の中身は ”. $a{“ 梅 ”}. “\n”; 3000 2000 1500 1000 %a 上松 松 竹 梅 添え字 中身
25
25 連想配列( 3 ) 練習 renso01.pl をダウンロードして実行 y:\corpus> perl renso01.pl 連想配列 a に値を代入. 値の出力がされているはず. を確かめる.
26
26 連想配列( 4 ) wc_nobe.pl の中の, @a = split(/\t/, $_); $count{$a[3]}++; ← ここが連想配列 –split 関数で タブで区切った,すると $a[?] に値が入 る –$a[3] には,品詞が入っている. – 品詞を 添え字 にして $count{ 品詞 } という連想配 列 「++」は 1 つ数字を足すという意味
27
27 foreach という構文( 1 ) 繰り返し構文として foreach というのが ある –wc_nobe.pl では foreach $key (sort keys %count) { printf ("%s\t%d\n", $key, $count{$key}); } 連想配列 %count の添え字を $key に入れ る 添え字はソートして順番に取り出す
28
28 foreach という構文( 2 ) –wc_kotonari.pl では foreach $key (keys %count0) { @b = split(/ /, $key); $count{$b[0]}++; } というのもある.ソートしないで取り出す.
29
29 foreach という構文( 3 ) while($_=<>) { chomp($_); @a = split(/\t/, $_); $soeji=$a[3]. " ". $a[0]. " ". $a[1]. " ". $a[2]; $count0{$soeji}++; } foreach $key (keys %count0) { @b = split(/ /, $key); $count{$b[0]}++; } foreach $key (sort keys %count) { printf ("%s\t%d\n", $key, $count{$key}); } exit;
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.