gensim.corpora.Dictionaryの単語IDを辞書順にする
gensimのcorpora.Dictionary
は単語IDがランダムに振られてしまい困るのでSortableDictionary
というものを作った。
from gensim import corpora class SortableDictionary(corpora.Dictionary): def __init__(self, *arg, **kwargs): super().__init__(*arg, **kwargs) def sort(self): idmap = dict(zip((v for k, v in sorted(self.token2id.items())), range(len(self.token2id)))) self.token2id = dict((token, idmap[tokenid]) for token, tokenid in self.token2id.items()) self.id2token = {} self.dfs = dict((idmap[tokenid], freq) for tokenid, freq in self.dfs.items()) ### 使い方 # corpora.Dictionary(documents) としていたところをこのように置き換える dictionary = SortableDictionary(documents) # 辞書順にソートしたいときにsort()を呼び出す dictionary.sort() # 元のcorpora.Dictionaryと同じようにファイルに保存できる dictionary.save_as_text("foo.txt") # 保存したファイルは元のcorpora.Dictionaryでも読み込める dictionary = corpora.Dictionary.load_from_text("foo.txt")
Pythonで大きいファイルを読み込む時にプログレスバーを表示
tqdmのインストール
$ pip install tqdm
プログレスバーを表示するプログラム
from tqdm import tqdm import os # ファイル名 filename = "sugoku_dekai_file.txt" # ファイルサイズを取得 filesize = os.path.getsize(filename) # ファイルを開く with open(filename) as f: read_size = 0 # ファイルのサイズを使用しプログレスバーを作成 with tqdm(total=filesize) as pbar: # 行ごとに処理 for line in f: # lineに対して何か処理 foo(line) # 読み込んだサイズを取得して足す read_size += len(line.encode('utf-8')) # プログレスバーを更新 pbar.update(read_size)
mecabコマンドの結果をparseしやすい形式にする
MeCabの出力はデフォルトで以下のようになるが、 これが意外と扱いづらい。
$ echo 新しいスクエニのゲームを買った。 | mecab 新しい 形容詞,自立,*,*,形容詞・イ段,基本形,新しい,アタラシイ,アタラシイ スクエニ 名詞,一般,*,*,*,*,* の 助詞,連体化,*,*,*,*,の,ノ,ノ ゲーム 名詞,一般,*,*,*,*,ゲーム,ゲーム,ゲーム を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 買っ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,買う,カッ,カッ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 。 記号,句点,*,*,*,*,。,。,。 EOS
LTSV形式での出力
MeCabのオプションを変更すると、以下のようにLTSV形式で出力できる。
$ echo 新しいスクエニのゲームを買った。 | mecab -F "surface:%m\tpos:%f[0]\tpos1:%f[1]\tpos2:%f[2]\tpos3:%f[3]\tcform:%f[4]\tctype:%f[5]\tbase:%f[6]\tread:%f[7]\tpron:%f[8]\n" -U "surface:%m\tpos:%f[0]\tpos1:%f[1]\tpos2:%f[2]\tpos3:%f[3]\tcform:%f[4]\tctype:%f[5]\tbase:%f[6]\tread:\tpron:\n" -E "" surface:新しい pos:形容詞 pos1:自立 pos2: pos3: cform:形容詞・イ段 ctype:基本形 base:新しい read:アタラシイ pron:アタラシイ surface:スクエニ pos:名詞 pos1:一般 pos2: pos3: cform: ctype: base: read: pron: surface:の pos:助詞 pos1:連体化 pos2: pos3: cform: ctype: base:の read:ノ pron:ノ surface:ゲーム pos:名詞 pos1:一般 pos2: pos3: cform: ctype: base:ゲーム read:ゲーム pron:ゲーム surface:を pos:助詞 pos1:格助詞 pos2:一般 pos3: cform: ctype: base:を read:ヲ pron:ヲ surface:買っ pos:動詞 pos1:自立 pos2: pos3: cform:五段・ワ行促音便 ctype:連用タ接続 base:買う read:カッ pron:カッ surface:た pos:助動詞 pos1: pos2: pos3: cform:特殊・タ ctype:基本形 base:た read:タ pron:タ surface:。 pos:記号 pos1:句点 pos2: pos3: cform: ctype: base:。 read:。 pron:。
Touch Bar付きのMacBookでMinecraftをプレイするときに常にファンクションキーを表示する
MacBookのTouch Bar搭載モデルでMinecraftをプレイするときに、ファンクションキーを表示しておく方法です。
手順
- Minecraftを起動する
- Dockにある作業台アイコンをcommandキーを押しながらクリックする
- Finderでjavaが選択されるので、右クリックして["java"をコピー]をクリックする
- Minecraftを終了させる
- ターミナルをLaunchpadから起動する。(Launchpadで「te」と検索すると見つかる)
- ターミナルでcommand+Vを押す。すると、
/Applications/Minecraft.app/Contents/runtime/jre-x64/1.8.0_74/bin/java
のような文字列が貼り付けられる - 先頭に
cd
を追加(cdの後のスペースも重要!)して、末尾の/java
を削除する - Enterキーを押して実行する
- 以下のコマンドを順に入力し、Enterキーを押して実行する
mv java java.app
ln -s java.app java
- [システム環境設定]→[キーボード]→[ショートカット]→[ファンクションキー]→[+ボタン]をクリックする
- 出てきたウインドウに、2で開いたFinderにある「java」をドラッグアンドドロップする(ショートカットの矢印がついていないほう)
- 追加ボタンをクリックする
元に戻す手順
- 上の手順の8までを実行する
- 以下のコマンドを入力し、Enterキーを押して実行する
mv java.app java
- [システム環境設定]→[キーボード]→[ショートカット]→[ファンクションキー]→[−ボタン]をクリックする
以上。
関連記事
Linuxbrewでsqliteを入れたのにgem install sqlite3が失敗した時の対処法
Linuxbrewでsqliteを入れたあと、
$ gem install sqlite3
を実行すると「sqlite3.h
が見つからない」というエラーメッセージが出て失敗する。
$ gem install sqlite3 Building native extensions. This could take a while... ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension.
そういう時は以下のようにLinuxbrewで入れたsqliteのパスを指定してあげればOK。
$ gem install sqlite3 -- --with-opt-dir=`brew --prefix sqlite`
Rubyで大きいファイルを読み込む時に進捗を表示
ruby-progressbar というgemを使うとプログレスバーを表示できる。
ruby-progressbarのインストール
$ gem install ruby-progressbar
進捗を表示しつつファイルを読むプログラム
require "ruby-progressbar" # ファイル名 filename = "sugoku_dekai_file.txt" # ファイルサイズを取得しプログレスバーを作成 progressbar = ProgressBar.create(total: FileTest.size(filename)) # ファイルを開いて行ごとに処理 open(filename) do |f| f.each_line do |line| # lineに対してなにか処理 foo(line) # プログレスバーを更新 progressbar.progress = f.pos end end # 最後にプログレスバーを100%にする progressbar.finish
ぼっちWikiに最適なGollum
GollumはデータベースにGitを使い、Markdownで書けるWiki。
Gollumの特徴は以下の通り。
- シンタックスハイライトや数式に対応している
- 様々な記法で書ける
gem
コマンドで簡単にインストールできる- データベースとしてGitを使うのでMySQLなどが不要
- Ruby+Sinatraで実装されている
- Rubyでマクロを書いて拡張できる
Gollumのインストール
ICUという文字コード変換ライブラリに依存しているのでまずはそれをインストール。
# OS Xの場合 $ brew install icu4c # Debian/Ubuntuの場合 $ sudo apt-get install libicu-dev
続いて、Gollum本体をインストール。
$ gem install github-markdown gollum
Gollumの起動
$ git init # 初回だけ $ gollum --mathjax --config auth.rb --allow-uploads
認証の設定
ぼっちWikiなので、他人に内容を見られてしまっては困る。
Gollumは普通のSinatraアプリと同じように、認証をつけることができる。
たとえばこんな感じのauth.rb
を作成するとBasic認証を追加できる。
module Precious class App < Sinatra::Base use Rack::Auth::Basic, "Restricted Area" do |username, password| [username, password] == ["foo", "bar"] end end end
※Basic認証&ファイルにパスワード直書きなので、盗聴やパスワード漏洩の可能性がある。あくまでも気休め。