毎日テキストマイニング

180日間、毎日テキストマイニングをするブログです

2018/09/13【82日目】自然言語処理100本ノック、その1

次にやることが思いつかないので、ひとまず自然言語処理100本ノックをやって行きたいと思います。

www.cl.ecei.tohoku.ac.jp

まずは000番目からです。

000 文字列を逆に表示する問題です。はいはい.reverse()を使えばいいんでしょ?と思いましたらは.reverse()はリスト型にしかないんですね。

moji = "stressed"
moji[::-1]
'desserts'

スライスが1個だけですと、後ろの-1番目の文字を消すだけです。

moji = "stressed"
moji[:-1]
'stresse'

スライスが2個だと後ろから1つずつ取り出すようになるらしいです。ちなみに-2を指定すると後ろから2つおきずつ取り出すようです。

moji = "stressed"
moji[::-2]
'dset'

001 000番目の問題でほぼ答えがわかったようなものですね。

moji1 = "パタトクカシーー"
moji1[::2]
'パトカー'

002

p = "パトカー"
t = "タクシー"
patotaku = ""

s2 = ""
for pato, taku in zip(p, t):
    print(pato)    
    patotaku += pato + taku
print(patotaku)
パ
ト
カ
ー
パタトクカシーー

zip、そんなに使い方をわかっていませんでしたが、enumerateの件もありまして100%理解しました。

003

moji4 = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics." 
moji_list = moji4.split(" ")
add =[]
for i in moji_list:
    add.append(len(i))
print(add)
[3, 1, 4, 1, 6, 9, 2, 7, 5, 3, 5, 8, 9, 7, 10]

ここは特に何も考えずにできました(成長しました)。

004

moji5 = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
moji_list2 = moji5.split(" ")
add2 = []
for i, moji in enumerate(moji_list2):
    if i in (1,5,6,7,8,9,15,16,19):
        hoge = [(i, moji[0])]
        print(dict(hoge))
    else:
        hoge = [(i, moji[:2])]
        print(dict(hoge))

正解の形がよくわからないので、これで合っているのかわかりませんが、何となくなんか違うような気がします。

005

moji6 = "I am an NLPer"
for bi in range(len(moji6)-1):
    print(moji6[bi] + moji6[bi+1])

tango = moji6.split(" ")
for bi in range(len(tango)):
    print(tango[bi] +" "+ tango[bi + 1])

何回か実装していますが、rangeで数値を回すのがわかっていればすぐに解けますね。

006 6は集合の問題ですね。文字列の和集合、積集合ってなに?そもそも差集合って何?という感じです。 ググって見たら{}で囲むset型というものらしいですね。

moji = {"あ","い","う","え","お"}

print(moji)
print(type(moji))
{'え', 'う', 'お', 'い', 'あ'}
<class 'set'>

順番が変わってますね。どうやら集合ですと順番が保証されないんですね。 順番通りにするには、sorted関数を使う必要があるそうです。  

moji = {"あ","か","さ","た","な"}

print(moji)
print(sorted(moji))
{'か', 'た', 'な', 'あ', 'さ'}
['あ', 'か', 'さ', 'た', 'な']

あれ? そうなるとリスト型になってますね。まぁ、いいや。

今日はあんまり進まなかったですが、7日くらいで終わらせたいと思います。

今日の結果

今日のAKBの呟きは47件でした。 要約するとこんな感じです。

"みゃおさんの生誕祭でした〜❤︎本当に尊敬する先輩です!おめでとうございます☺️そしてわたしの推しメン加藤玲奈さんが今日も神レベルで可愛かったことをお知らせします。""【AKB48グループ第2回ユニットじゃんけん大会】今年もユニット対抗で開催!CDデビューする今年のシンデレラは誰だ?#AKB48じゃんけんこれから発売です!!#拡散希望…""今日の公演本当にありがとうございました?
#タイ#ขอบคุณค่ะ今日は、2回公演でした!ありがとうございました!夜公演はみゃおさんの生誕祭✨みゃおさんのずっとずっとのダンスがすっごく大好きです?
'公演': 14, '今日': 12, 'さん': 11, '生誕': 9, '祭': 9, '日': 8, 'お願い': 7, 'タイ': 7, '嬉しい': 5, '回': 5, '感動': 5, '写真': 5, 
'公演': 14, '今日': 12, 'さん': 11, '生誕': 9, '祭': 9, '日': 8, 'お願い': 7, 'タイ': 7, '嬉しい': 5, '回': 5, '感動': 5, '写真': 5, '楽しい': 4, 'チーム': 4, '皆さん': 4, '夜': 4, '大会': 4, '発売': 4, '笑': 4, '人': 4,
'する': 27, '公演': 14, '今日': 12, 'さん': 11, '頑張る': 10, '生誕': 9, '祭': 9, '日': 8, 'お願い': 7, 'タイ': 7, 'いる': 7, 'ける': 6, '嬉しい': 5, '回': 5, '感動': 5, '写真': 5, '思う': 5, 'くれる': 5,

f:id:rimt:20180918235458p:plain

f:id:rimt:20180918235601p:plain