入社して1.5年、いつか体が勝手に覚えてくれると思ってノホホーンとしていた「英語」ですが、いやー全く覚えてくれませんね。
大誤算でした。外資だと思ってなめてました。
いまだに、Windwos とか書いといて気付かないという体たらくです。
そこで一念発起です。
MS 社内で流通している英単語に注力してみよう!プロジェクトの発足です。
社内のメーリングリストに流れているメールから英単語を抜き出して、頻出リストを作ることにしました。
どうやるか。
テキストマイニング?ピボットテーブル?そんなものは知りませんし、見たこともありません。必殺技の名前でしょうか?
私のツールは昔から vbscript だけって決まってるんです。
結果出来上がったのが、以下のスクリプトです。あまりのベタさに恥ずかしすぎてお見せしたくないのですが、何かのヒントになるかと思い、赤面しながらの放出です。
何をやっているかは一目瞭然です。
読みこんだテキストからいらない文字を片っ端から半角空白に置き換え、 半角空白でSplit し、 あとはひたすらループで数を計算
はずかしいです。
工夫した点は...あえて言えば、色分けした部分でしょうか。Dictionaryオブジェクトを使用して、同じ単語が出てきたらカウントアップしています。
3行目の「<テキストファイルを指定>」とあるところには、テキストファイルを指定してください。OUTLOOK を使っている方であれば、[ファイル]メニューの[インポートとエクスポート]から、フォルダ全体を一括でテキストファイルに保存できます。
ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile =objFSO.GetFile("<テキストファイルを指定>") Set objTS = objFile.OpenAsTextStream(ForReading, 0) r = objTS.ReadAll
r = replace(r, "(", " ") r = replace(r, ")", " ") r = replace(r, "/", " ") r = replace(r, "=", " ") r = replace(r, ".", " ") r = Replace(r,chr(9)," ") r = Replace(r, "," ," ") r = Replace(r, ":", " ") r = Replace(r, ";", " ") r = Replace(r, """", " ") r = Replace(r, "“", " ") r = Replace(r, "”", " ") r = Replace(r, "’", " ") r = Replace(r, "?", " ") r = Replace(r, "!", " ") r = Replace(r, "$", " ") r = Replace(r, "\", " ") r = Replace(r, "%", " ") r = Replace(r, "*", " ") r = Replace(r, ",", " ") r = Replace(r, "[", " ") r = Replace(r, "]", " ") r = Replace(r, "{", " ") r = Replace(r, "}", " ") r = Replace(r, " ", " ") r = Replace(r, "|", " ") r = Replace(r, "~", " ") r = Replace(r, "‘", " ") r = Replace(r, "+", " ") r = Replace(r, "<", " ") r = Replace(r, ">", " ") r = Replace(r, "…", " ") r = Replace(r, "&", " ") r = Replace(r, "-", " ") r = Replace(r, "1", " ") r = Replace(r, "2", " ") r = Replace(r, "3", " ") r = Replace(r, "4", " ") r = Replace(r, "5", " ") r = Replace(r, "6", " ") r = Replace(r, "7", " ") r = Replace(r, "8", " ") r = Replace(r, "9", " ") r = Replace(r, "0", " ") r = Replace(r, "_", " ") r = Replace(r, "@", " ") r = Replace(r, " ", " ") r = Replace(r, vbCr, " ") r = Replace(r, vbLF, " ") r = Replace(r, vbCrLf, " ")
arrR = split(r," ")
wscript.echo UBound(arrR)
Set objDic = CreateObject("Scripting.Dictionary") Set objDicCount = CreateObject("Scripting.Dictionary")
For each n in arrR n = UCase(trim(n)) If len(n) >1 and IsNull(n) = False then If not objDic.Exists(n) then objDic.Add n,1 Else objDic.Item(n) = objDic.Item(n) + 1 End If End if Next
Wscript.Echo objDic.Count objKeys = objDic.Keys objItems = objDic.Items
For i = 0 To objDic.Count -1 Wscript.Echo objKeys(i) & "," & objDic.Item(objKeys(i)) Next
このスクリプトを、拡張子 vbs で保存します。
結果を、Excelで読み込み、並べ替えたところ....出ました。
800通のメールを構成する、13000単語から、MS ワールドワイド エバンジェリズムグループ頻出単語一覧 トップ 140 の発表です。
TO と MICROSOFT を抑えて、堂々の一位は THE に決まりました。
注目は、113 位の APPLE と 122 位の IPHONE ですかね。来週はどうなっているでしょう。
このリストを見て思うのは...
THE かよっ!
やる前からわかっちゃいたんですけどね。
人名とかURLなんかもごっちゃになったまま集計したので、ぜーんぜん...ではありませんが、大した意味はありませんでした。
ちなみに、アルファベット順にすると結構よさげなんですけどね。
正規表現を使えば、もっとコードは短くなりそうですね。
こんな感じでしょうか。
(前略)
Set re = New RegExp
re.Pattern = "[a-zA-Z]{2,}"
re.Global = True
Set Matches = re.Execute(r)
(後略)
さすが、安納さん。楽しく身につける努力を忘れていないところがすばらしい!
typoは良くやることなので、気にしちゃいません。っと言っていられない人がここにいます。よく"l"と"r"を間違えたり、"n"と"m"を間違えたり、単語を使い間違えたり。
メールを出す前にスペルチェックをかけるようにしていますが、候補が見つからないといわれ、結局自分で辞書をひきひき・・・
身につける一番よい方法は、書くことでしょうか。
昔は、一番でボールペンのインクを使いきれと言われたり、とにかく書け!といわれましたが、文明の利器のおかげで手が動きません。
私は、冠詞より「(結果が)再現がきない」といった単語を目にすることが増えました。あと"Error", "Bug"が多い気がします。
ボキャブラリーを増やすなら単語の長いもの順にしたらどうでしょうか。普通長いもんほどよく知らないでしょ(●^o^●)
>sueda_xp@msn.com さん
ありがとうございます!
そういう突っ込みをお待ちしておりました。
是非とも sueda_xp@msn.com さんのblogで改良版の公開を!
>hirorin さん
私は、今年は英語がんばります...というか、そもそも単語のオーダーが足りなすぎるので、意識して覚えていこうと思います。頻繁に目に単語なのに、文意で判断してしまって、単語そのものの意味を正確に理解していないのだ、ということが最近わかってきました..。いかんなぁ...。
>奥主さん
なるほど。ちょっと並べ替えてみます。