ハイファットマンの友人M

ハイファットマンはおともだちです。ほぼメモ

言語処理100本ノック(その4)

前回の続きから

第2章 10から14まで

10. 行数のカウント

行数をカウントせよ.確認にはwcコマンドを用いよ.

file = open('hightemp.txt')
file_list = file.readlines()
print(len(file_list))

# 実行結果
24
# wcコマンドの結果
$ wc -l hightemp.txt 
24 hightemp.txt

11. タブをスペースに置換

タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ.

file = open('hightemp.txt')
for line in file:
    print(line.replace('\t', ' '), end='')

# 実行結果
高知県 江川崎 41 2013-08-12
埼玉県 熊谷 40.9 2007-08-16
岐阜県 多治見 40.9 2007-08-16
山形県 山形 40.8 1933-07-25
山梨県 甲府 40.7 2013-08-10
和歌山県 かつらぎ 40.6 1994-08-08
静岡県 天竜 40.6 1994-08-04
山梨県 勝沼 40.5 2013-08-10
埼玉県 越谷 40.4 2007-08-16
群馬県 館林 40.3 2007-08-16
群馬県 上里見 40.3 1998-07-04
愛知県 愛西 40.3 1994-08-05
千葉県 牛久 40.2 2004-07-20
静岡県 佐久間 40.2 2001-07-24
愛媛県 宇和島 40.2 1927-07-22
山形県 酒田 40.1 1978-08-03
岐阜県 美濃 40 2007-08-16
群馬県 前橋 40 2001-07-24
千葉県 茂原 39.9 2013-08-11
埼玉県 鳩山 39.9 1997-07-05
大阪府 豊中 39.9 1994-08-08
山梨県 大月 39.9 1990-07-19
山形県 鶴岡 39.9 1978-08-03
愛知県 名古屋 39.9 1942-08-02
# sedコマンドでの実行結果
$ sed -e "s/\t/ /g" hightemp.txt 
高知県 江川崎 41 2013-08-12
埼玉県 熊谷 40.9 2007-08-16
岐阜県 多治見 40.9 2007-08-16
山形県 山形 40.8 1933-07-25
山梨県 甲府 40.7 2013-08-10
和歌山県 かつらぎ 40.6 1994-08-08
静岡県 天竜 40.6 1994-08-04
山梨県 勝沼 40.5 2013-08-10
埼玉県 越谷 40.4 2007-08-16
群馬県 館林 40.3 2007-08-16
群馬県 上里見 40.3 1998-07-04
愛知県 愛西 40.3 1994-08-05
千葉県 牛久 40.2 2004-07-20
静岡県 佐久間 40.2 2001-07-24
愛媛県 宇和島 40.2 1927-07-22
山形県 酒田 40.1 1978-08-03
岐阜県 美濃 40 2007-08-16
群馬県 前橋 40 2001-07-24
千葉県 茂原 39.9 2013-08-11
埼玉県 鳩山 39.9 1997-07-05
大阪府 豊中 39.9 1994-08-08
山梨県 大月 39.9 1990-07-19
山形県 鶴岡 39.9 1978-08-03
愛知県 名古屋 39.9 1942-08-02

12. 1列目をcol1.txtに,2列目をcol2.txtに保存

各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.

file = open('hightemp.txt')
for line in file:
    line_list = line.split('\t)
    col1.write(line_list[0])
    col1.write('\n')
    col2.write(list_line[1])
    col2.write('\n')

# 実行結果
$ cat col1.txt 
高知県
埼玉県
岐阜県
山形県
山梨県
和歌山県
静岡県
山梨県
埼玉県
群馬県
群馬県
愛知県
千葉県
静岡県
愛媛県
山形県
岐阜県
群馬県
千葉県
埼玉県
大阪府
山梨県
山形県
愛知県

$ cat col2.txt 
江川崎
熊谷
多治見
山形
甲府
かつらぎ
天竜
勝沼
越谷
館林
上里見
愛西
牛久
佐久間
宇和島
酒田
美濃
前橋
茂原
鳩山
豊中
大月
鶴岡
名古屋
# cutコマンドの実行結果
$ cut -f 1 hightemp.txt 
高知県
埼玉県
岐阜県
山形県
山梨県
和歌山県
静岡県
山梨県
埼玉県
群馬県
群馬県
愛知県
千葉県
静岡県
愛媛県
山形県
岐阜県
群馬県
千葉県
埼玉県
大阪府
山梨県
山形県
愛知県

$ cut -f 2 hightemp.txt 
江川崎
熊谷
多治見
山形
甲府
かつらぎ
天竜
勝沼
越谷
館林
上里見
愛西
牛久
佐久間
宇和島
酒田
美濃
前橋
茂原
鳩山
豊中
大月
鶴岡
名古屋

13. col1.txtとcol2.txtをマージ

12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ.

col1 = open('col1.txt').readlines()
col2 = open('col2.txt').readlines()
for (line1, line2) in zip(col1, col2):
    print(line1.replace('\n', '\t') + line2.rstrip('\n'))

# 実行結果
高知県   江川崎
埼玉県   熊谷
岐阜県   多治見
山形県   山形
山梨県   甲府
和歌山県    かつらぎ
静岡県   天竜
山梨県   勝沼
埼玉県   越谷
群馬県   館林
群馬県   上里見
愛知県   愛西
千葉県   牛久
静岡県   佐久間
愛媛県   宇和島
山形県   酒田
岐阜県   美濃
群馬県   前橋
千葉県   茂原
埼玉県   鳩山
大阪府   豊中
山梨県   大月
山形県   鶴岡
愛知県   名古屋
# pasteコマンドの実行結果
$ paste col1.txt col2.txt 
高知県   江川崎
埼玉県   熊谷
岐阜県   多治見
山形県   山形
山梨県   甲府
和歌山県    かつらぎ
静岡県   天竜
山梨県   勝沼
埼玉県   越谷
群馬県   館林
群馬県   上里見
愛知県   愛西
千葉県   牛久
静岡県   佐久間
愛媛県   宇和島
山形県   酒田
岐阜県   美濃
群馬県   前橋
千葉県   茂原
埼玉県   鳩山
大阪府   豊中
山梨県   大月
山形県   鶴岡
愛知県   名古屋

14. 先頭からN行を出力

自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ.

print('自然数を入力')
input_num = int(input())

file_list = open('hightemp.txt').readlines()
for line in file_list[0:input_num]:
    print(line, end='')

# 実行結果
自然数を入力
3
高知県   江川崎   41  2013-08-12
埼玉県   熊谷  40.9    2007-08-16
岐阜県   多治見   40.9    2007-08-16
# headコマンドの実行結果
$ head -n 3 hightemp.txt 
高知県   江川崎   41  2013-08-12
埼玉県   熊谷  40.9    2007-08-16
岐阜県   多治見   40.9    2007-08-16

今日はここまで

ubuntu16.04にdockerをインストール

ubuntu16.04にdockerをインストールします。

参考にしました。 qiita.com Ubuntu — Docker-docs-ja 1.13.RC ドキュメント

ほぼ上のとおりにできました。


以下メモ

ただ途中まで↓のURLを見てて????ってなりました。

docs.docker.com

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

これをやったあとから

$ sudo apt-get update
〜略〜
パッケージリストを読み込んでいます... 完了
W: https://download.docker.com/linux/ubuntu/dists/xenial/InRelease の取得に失敗しました  Could not resolve host: download.docker.com
W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

って出るようになってしまった。

結果的に/etc/apt/sources.listの以下の行をコメントアウトしたらOKでした。

deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable

正しいやり方かはわからない・・・・

言語処理100本ノック(その3)

第1章 06から09まで

06.

paraparaparadise"と"paragraph"に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.さらに,'se'というbi-gramがXおよびYに含まれるかどうかを調べよ.

# 05のを少し変更
def bi_gram(str_split):
    n_gram = []
    for i in range(0, len(str_split) - 1):
        n_gram.append(str_split[i:i + 2])
    return n_gram

str1 = 'paraparaparadise'
str2 = 'paragraph'
print(bi_gram(str1))

x = set(bi_gram(str1))
y = set(bi_gram(str2))

print(x | y) # 和集合
print(x & y) # 積集合
print(x - y) # 差集合
print('se' in x | y)

# 出力
# {'ph', 'se', 'ar', 'pa', 'gr', 'di', 'ra', 'ag', 'ad', 'is', 'ap'}
# {'ap', 'ra', 'ar', 'pa'}
# {'is', 'se', 'di', 'ad'}
# True

07.

引数x, y, zを受け取り「x時のyはz」という文字列を返す関数を実装せよ.さらに,x=12, y=“気温”, z=22.4として,実行結果を確認せよ.

def template_text(x, y ,z):
    print("{}の時の{}は{}".format(x, y, z))

template_text(12, '気温', 22.4) # 12の時の気温は22.4

08.

与えられた文字列の各文字を,以下の仕様で変換する関数cipherを実装せよ.

英小文字ならば(219 - 文字コード)の文字に置換 その他の文字はそのまま出力 この関数を用い,英語のメッセージを暗号化・復号化せよ.

def cipher(string):
    text = ''
    for c in string:
        if c.islower():
            text += (chr(219 - ord(c)))
        else:
            text += (c)
    return text

str = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."

print(str)
print(cipher(str))
print(cipher(cipher(str)))

# 出力
# I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind .
# I xlfowm'g yvorvev gszg I xlfow zxgfzoob fmwvihgzmw dszg I dzh ivzwrmt : gsv ksvmlnvmzo kldvi lu gsv sfnzm nrmw .
# I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind .

09.

スペースで区切られた単語列に対して,各単語の先頭と末尾の文字は残し,それ以外の文字の順序をランダムに並び替えるプログラムを作成せよ.ただし,長さが4以下の単語は並び替えないこととする.適当な英語の文(例えば"I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind .“)を与え,その実行結果を確認せよ.

import random 

str = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."

random_arry = []
for s in str.split():
    if len(s) > 4:
        list_s = list(s)[1:len(s)-1]
        random.shuffle(list_s)
        text = s[0] + ''.join(list_s) + s[len(s)-1]
        random_arry.append(text)
    else:
        random_arry.append(s)

print(' '.join(random_arry))
# I culn'odt blvieee that I colud alltcuay utresnandd what I was rnieadg : the pheoenmnal poewr of the hmuan mind .

やっと準備運動おわった

pythonわからなすぎて調べながらやってるから時間がかかる

言語処理100本ノック(その2)

第1章の04と05

04.

“Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭に2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

str = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Migh    t Also Sign Peace Security Clause. Arthur King Can."
dict = {}
for i, s in enumerate(str.split()):
    if i + 1 in [1, 5, 6, 7, 8, 9, 15, 16, 19]:
        dict[i] = s[0] # 1文字目
    else:
        dict[i] = s[0:2] # 0文字目から2文字
print(dict)

# {0: 'H', 1: 'He', 2: 'Li', 3: 'Be', 4: 'B', 5: 'C', 6: 'N', 7: 'O', 8: 'F', 9: 'Ne', 10: 'Na', 11: 'Mi', 12: 'Al', 13: 'Si', 14: 'P', 15: 'S', 16: 'Cl', 17: 'Ar', 18: 'K', 19: 'Ca'}

05.

与えられたシーケンス(文字列やリストなど)からn-gramを作る関数を作成せよ.この関数を用い,"I am an NLPer"という文から単語bi-gram,文字bi-gramを得よ.

def bi_gram(str_split):
    n_gram = []
    for i in range(0, len(str_split) - 1):
        n_gram.append(str_split[i:i + 2])
    print(n_gram)

str_split = "I am an NLPer".split()
bi_gram(str_split) # 単語bi-gram
# [['I', 'am'], ['am', 'an'], ['an', 'NLPer']]

bi_gram(''.join(str_split)) # 文字bi-gram
# ['Ia', 'am', 'ma', 'an', 'nN', 'NL', 'LP', 'Pe', 'er']

まず単語bi-gram、文字bi-gramがよくわからなかった・・・ 参考↓

d.hatena.ne.jp

言語処理100本ノック(その1)

Pythonが流行りと聞いたので

www.cl.ecei.tohoku.ac.jp

$ python -V
Python 3.6.1

第1章

00.

文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.

print('stressed'[::-1]) # desserts

参考: stackoverflow.com

01.

「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.

'パタトクカシーー'[0::2] # パトカー

02.

「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.

str = ''
for i, j in zip('パトカー','タクシー'):
    str += i + j
print(str) # パタトクカシーー

zip('パトカー','タクシー') でパトカーとタクシーを一緒にループまわしてくれる

03.

“Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.

str = "Now I need a drink, alcoholic of course, after the heavy     lectures involving quantum mechanics."
list = []
for s in str.split(' '):      
    list.append(len(s.strip(',.')))
print(list) # [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]

お腹空いたから今日はここまで

Ubuntuなれなくて使いづらい

古いPCにUbuntuを入れた

7年前くらいに買ったノートPCがずっと眠っていたのでUbuntuを入れました。 今回はUSBから起動させます。

眠ってたPCは、windows7・メモリ4GBのdynabookです。

手順

  1. イメージファイルのダウンロード
  2. ライブメディアの作成
  3. ubuntuインストール

Ubuntuイメージのダウンロード

Ubuntu 16.04 LTS - 2021年4月までサポート 64bit版のISOイメージをダウンロード

Ubuntu Desktop 日本語 Remixのダウンロード | Ubuntu Japanese Team

ライブメディア作成

この通りにライブメディアを作成

kledgeb.blogspot.jp

Ubuntuの起動

USBを刺した状態で電源を入れる->F2キーを連打してBIOSを起動する

AdvancedメニューのChange Boot Orderを選択 f:id:motty72:20170503135721j:plain

USB Memoryが一番上にくるように設定変更

F10を押したらUbuntuの画面が出てきます。

f:id:motty72:20170503133556j:plain

まず試しに、 Try Ubuntu without Installingでちゃんと動きそうか軽く触ってみたところ問題なさそうだったので、シャットダウン->起動

今度は、2番目のInstall Ubuntuを選択する

これでもともと入ってたwindowsが使えなくなる

f:id:motty72:20170503133808j:plain

いろいろ設定の画面が出てくるのでいい感じに設定する。

参考にしました↓

【初心者向け】ubuntu 13.04 を古いノートPCに入れてみた。② | jblog

途中でてくる グラフィックス、Wi-Fi機器、Flash、MP3やその他のメディアに必要なサードパーティーソフトウェアをインストールすると インストールの暗号化、LVM利用はとりあえずチェックを入れました。

もろもろの設定とインストールが終わったら、もう一回再起動します。

ログインしてこの画面が出てくれば完了!!

f:id:motty72:20170503134147j:plain

所感

思ったより簡単でしたが、なぜかなかなかwifiがつながってくれない。