言語処理100本ノックに挑戦(第1セット)

言語処理100本ノックより。

(1)
print len([line for line in open("./address.txt", "r")])
(2)
import re
print re.compile("\t").sub(" " ,file("./address.txt", "r").read())
(3)
col1, col2 = zip(*[line.split("\t") for line in open("./address.txt", "r")])
open("col1.txt", "w").write("\n".join(col1))
open("col2.txt", "w").write("".join(col2))
(4)
ss = []
for line in zip(open("./col1.txt", "r").read().split("\n"), open("./col2.txt", "r").read().split("\n")):
    ss.append("\t".join(line))

open("4.txt", "w").write("\n".join(ss))

なんかヘン。

(5)
# -*- coding: utf-8 -*-
import sys
N = int(sys.argv[1])
with open("./address.txt") as myfile:
    head = [myfile.next() for x in range(N)]
print "".join(head)
(6)

悪いやりかた。

# -*- coding: utf-8 -*-
import sys
N = int(sys.argv[1])
print "\n".join(file("./address.txt", "r").read().split("\n")[-N:])
(7)
# -*- coding: utf-8 -*-
# (3)で作ったcol1.txtを利用
print len(set(open("./col1.txt", "r").read().split("\n")))
(8)

これ難しくないですかっ><
参考:Unicode文字列をソートする方法

# -*- coding: utf-8 -*-
import locale
locale.setlocale(locale.LC_ALL, "")

print "\n".join(open("./col2.txt", "r").read().decode("utf-8").split("\n").sort(cmp=locale.strcoll))

が、自分の環境だとNoneが返ってくる。ぐぬぬ

(9)

8がよく分からないので保留。まず2コラム目でソートし、2コラム目の同じ要素でgroupingしてそれぞれのグループを1コラム目の要素でソートするという方法が思いついたのだけどこれって効率が悪いのかしら。

(10)
from collections import defaultdict
words = defaultdict(int)
for word in file("./col2.txt", "r"):
    words[word] += 1

sorted(words.items())

むしろ答え合わせ用に提示されたUnixコマンドを知らなかったのでためになった。
(5)、(6)とか明らかに題意を満たしてないけど公開しちゃう(オイ
意気揚々と第二セットに向かったところそもそもtwitterを知らなかった。いや存在は知ってるけども(´・ω・`)