設問2:英語の男女人名の違いを調べてみよう!

CodeIQに出題した設問2の解説。

Pythonの自然言語処理パッケージNLTKをインストールすること。以下のURLを参照して下さい。

http://www.nltk.org/

NLTKにはフリーの英語人名データが収録されています。

下記のようにパッケージを読み込んでプログラミングしてください。

from nltk.corpus import names

下記のコマンドで男女の人名ファイル名を取得できます。

names.fileids()

namesに収録されている男女の人名ファイルを読み込んで、語末のアルファベット1文字による人名の頻度表を作成してください。例えば、’John’であれば、’n’が1回と数えます。

NLTKのConditionalFreqDist関数を使って、頻度の集計をしてください。

ConditionalFreqDist内のペアは(‘a’, ‘female.txt’)のような順序でプログラムを作成すること。

出力ファイルは、ヘッダーを付けて、カンマ区切りのCSV形式で以下の通り。

アルファベット順で出力すること。

1カラム目 語末の1文字

2カラム目 女性人名の頻度

3カラム目 男性人名の頻度

WordEnding,female.txt,male.txt

,1,0

a,1773,29

c,0,25

b,9,21

(以下省略)

[注意]namesの収録データ不備により、女性名’Gale ‘が含まれており、語末をとると空白’ ‘になってしまいます。今回は出力ファイルからこの欄を除く必要はありません。

nltkでデータをダウンロード出来ない時は、下記のサイト内の32. Names Corpusからダウンロードしてください。

http://nltk.googlecode.com/svn/trunk/nltk_data/index.xml

提出物

解答は、テキストファイルをアップロードしていただきます。1枚のテキストファイルにして、提出してください。

提出する内容は以下の通り。

1. 出現頻度を出力するPythonの処理プログラム。

2. 男女の人名の語末文字の上位3位は何であるか。上位3位の語末文字から何が言えるか、気づいた点を書いてください。

参考文献

・Steven Bird 「入門 自然言語処理」オライリー・ジャパン

 http://www.amazon.co.jp/gp/product/4873114705

・上記の書籍の英語版はオンラインで読めます。

 Natural Language Processing with Python — Analyzing Text with the Natural Language Toolkit

 Steven Bird, Ewan Klein, and Edward Loper

 O’Reilly Media, 2009.

 http://nltk.org/book/

解答のポイントは次の三つです。

1. NLTKで複数のファイルを扱う。

2. ConditionalFreqDist関数を使って、条件付き頻度分布オブジェクトを生成する。

3. 頻度出力の為のループの書き方。

プログラムの例は以下の通り。

#!/usr/bin/python
#
#                               names.py
#
import nltk
from nltk.corpus import names
def main(o_file):
cdf = nltk.ConditionalFreqDist(
(word.lower()[-1:], fileid)
for fileid in names.fileids()
for word in names.words(fileid))
### OUTPUT ###
o_handle = open(o_file, 'w')
s = 'WordEnding,'
s += ','.join(names.fileids())
o_handle.write('%s\n' % s)
for target in cdf.keys():
s = target
for fileid in names.fileids():
s += ',%d' % cdf[target][fileid]
o_handle.write('%s\n' % s)
###
main('names.out')

出力は以下の通り。

WordEnding,female.txt,male.txt
,1,0
a,1773,29
c,0,25
b,9,21
e,1432,468
d,39,228
g,10,32
f,2,25
i,317,50
h,105,93
k,3,69
j,1,3
m,13,70
l,179,187
o,33,165
n,386,478
p,2,18
s,93,230
r,47,190
u,6,12
t,68,164
w,5,17
v,2,16
y,461,332
x,10,10
z,4,11

気づいた点。

頻度の上位三位を調べると、女性名はa,e,yで語尾で多く、男性名はn,e,yが多い。語尾がaならば、女性名、語尾がnならば男性名と言えそうです。

更なる分析が必要となりますね。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中