サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブックレビュー
qiita.com/ikawaha
概要 Zenn で記事を GitHub に管理しているのですが、ここに昔 Qiita で書いた記事も加えたくて、Qiita の記事を Zenn 形式で保存するコマンドを作りました。 インストール $ qiita-zenn -user ikawaha -verbose https://qiita.com/api/v2/users/ikawaha/items?page=1 Goa v3 のテストをシュッとする 人生で何度目かのダブル配列TRIEを書いた 形態素解析器 kagome のユーザー辞書の使い方 goa でデザイン・ファーストをシュッとする golang で string のポインタを取得する Luceneで使われてるFSTを実装してみた(正規表現マッチ:VMアプローチへの招待) メモ:golang で []byte と string の読み込みを透過的に扱う試行錯誤 Elastics
概要 人は人生に何度かTRIEを書くという.そんなわけで,何度目かのTRIEでsudachiのdarts-cloneをクローンしてみました.TRIEの記事は沢山あるので,ここではGoに移植してみて気づいた事をいくつか共有していきたいと思います. 今回の成果物: https://github.com/ikawaha/dartsclone darts-clone 元ネタはこちら.Java版とPython版があります. https://github.com/WorksApplications/Sudachi/tree/develop/src/main/java/com/worksap/nlp/dartsclone https://github.com/WorksApplications/SudachiPy/tree/develop/sudachipy/dartsclone 本家は https:/
この記事は Go アドベントカレンダー 12/19 の記事です. kagome の Dic にもう少し自由なインタフェース(DataStoreから辞書登録など)があれば embed コードでじゃない形で使えるのかなーと、昔考えた事がありました。 — mattn (@mattn_jp) 2017年12月13日 たぶん誰も使ってないと思いますが, kagome にはユーザー辞書があります.形式は kuromoji のユーザー辞書と同じです.なので,「関西国際空港」を登録して search モードで「関西/国際/空港」という風に分割することが出来ます. といってもあんまり伝わらないだろうな,と思って特に説明を書いてなかったのですが,いい機会なのでもし誰かのお役に立てばと思い,kagome のユーザー辞書について少し説明したいと思います. TL;DR ユーザー辞書に登録された語彙は最優先で使われま
はじめに この記事は Go(その3) Advent Calendar の19日目の記事です。 goa.design(以下 goa)の紹介をしたいと思います。 goa は APIデザインを書くと、そこから API サーバのモックとかクライアントとかドキュメントとか一通り生成してくれるマイクロサービス用のフレームワークのことです。 goa は APIデザインを書いて → レビュー → 実装 → デザイン見直し → ・・・ とサイクルを回して開発するプロセスをとれるようにできています。まずは API デザインを書くことで見通しよく進めよう、というのが goa を利用する際の設計方針です。 とてもすばらしいプロダクトなのですが、goa という名前のググラビリティが非常に悪く、なかなか広まらないなーと記事を書いたりしてました。最近、ちょっとずつですが goa のよさが広がってきていて(?) Adve
デフォルトのElasticsearchは常にクラスタを組みたがっているので気をつける,というかクラスタ設定とめとくElasticsearchbad_knowhow 概要 elasticsearchはデフォルトでmulticastがONになっているので,気がつくと知らないノードとクラスタ組んでいるときがある.インストールしたら, クラスタ名を変える multicastをやめる のどっちか(もしくは両方)ぐらいはしておいた方がいい. 経緯 icu の filter プラグインを入れたのですが,どうも上手く認識されなくてさんざん悩んだあげく,次のようなアドバイスをもらいました. @ikawaha クラスタ名を変更したほうがいいですよ。デフォルトで起動すると、同じネットワークで立ち上げてる人がいると、クラスタ組んじゃうから。 — Jun Ohtani (@johtani) 2014, 8月 8 !
なんてコードをよく書きます. 特にメソッドの引数が byte スライスでしか用意されてない場合などは, などと書いたりします. string は読み込み専用のスライスみたいな物だという認識だったので,キャストしても,ポインタがコピーされるだけで,必要になったらコピーされるだろうぐらいに思ってたんですが,調べてみたらメモリがまるっとコピーされるので,パフォーマンスに影響しそうな箇所ではこの方法は避けるべきです.(その辺のお話はこちら) []byte と string を別個に扱おうと思うと,たとえば, func MyFindString(input string) func MyFindByteSlice(input []byte) みたいな専用関数をそれぞれの方ごとに用意しなければいけなくなってしまいます.たぶんメソッドの中身も似たようなものになるわけですし,保守の観点からは専用メソッドを
概要 elasticsearch のインストールから運用のだいぶ手前までのお試しをまとめたメモです.クライアントはpythonクライアントを使います.これがあれば,データの追加や検索をpythonを利用して行えるため,データの加工なども楽になる・・・と思うのですよ. 環境設定 Elasticsearchのインストール 環境が debian だったので,debのパッケージを持ってきてでインストール. % wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.1.deb % sudo dpkg -i elasticsearch-1.3.1.deb # The first existing directory is used for JAVA_HOME (if JAVA_HOME
入力と出力のペアに対して,上のようなグラフを作るのが目標です.テーブルの出力のとこは数字が書いてありますが,文字列だと思ってとらえて下さい.map だと出力は1つに限られちゃいますが,ひとつの入力に対して出力が複数あってもいいです.たとえば入力 "feb" に対して,出力は "28" と "29" があります.(2月は28日と29日のときがありますね). ノードの部分が状態で,そこから出ている矢印が状態遷移になります.矢印には a/b というラベルがついていますが,a の部分が入力とのマッチを意味し,b の部分がそのときの出力を意味します. 上の例で示すFSTで,"aug"を処理するには,"aug"を頭から読んで,入力"a"に対応するの(9)から(3)への矢印を選択します.そのとき,出力として"3"を記録しておきます.そのあと,"u"に対して(3)から(2)への矢印を選択し,"1"を先ほど
備忘φ(..)メモ. この記事に書いてあることはだいぶ古いです. 参考 高速スケーラブル検索エンジン ElasticSearch Server Elasticsearch: Document APIs Basics REST Request Type Request Type 用途
kuromoji のコードを読んでみましたが,ヒューリスティックな処理で,漢字のみで構成されている形態素が閾値(2文字)以上なら閾値超えた文だけペナルティを付与するという割と単純な処理でした.kagome での該当コードはこんな感じです. // ペナルティの計算 // searchModeKanjiLength は 2, searchModeKanjiPenalty は 1700 です. func additionalCost(n *node) int { l := utf8.RuneCountInString(n.surface) if l > searchModeKanjiLength && kanjiOnly(n.surface) { return (l - searchModeKanjiLength) * searchModeKanjiPenalty } if l > search
追記 リファクタリングに gofmt だけでなく gorename も使えるようになりました.単なる文字列の置き換えではうまくいかない場合は gorename を使おう! @mattnさんの記事 golang のリファクタリングには gofmt ではなく、gorename を使おう。 概要 golang のリファクタリングは面倒と思いませんか?たとえば,public なメソッドを private にしようと思ったら,該当メソッドの頭文字を大文字から小文字に変更しなきゃいけなくて,いっぱい編集箇所があって泣けるとかありませんか? なんでこんなに面倒なんだ!と思っていましたが,さすが golang.すでにリファクタリング用のツールが用意されていました.それも,普段よく使う gofmt がそれでした. gofmt をリファクタリングに使う 出典:https://golang.org/cmd/go
いまはもっと賢くなってる。最適化バンザイ https://medium.com/a-journey-with-go/go-string-conversion-optimization-767b019b75ef 概要 string を byte スライスにしたり,またその逆だったりをおこなうのに, なんてコードをよく書きます.string は読み込み専用のスライスみたいな物だという認識だったので,キャストしても,ポインタがコピーされるだけで,必要になったらコピーされるだろうぐらいに思ってたんですが,調べてみたらメモリがまるっとコピーされるのでパフォーマンスに影響しそうなときは要注意です. 詳細 string を byte スライスにキャストするプログラムを書いて,アセンブリコードを吐かせてみました.
概要 Elasticsearch の char_filter のひとつ,icu_normalizer の使い方メモです. オプションの設定方法がよく分からなかったので調べてみました. icu plugin は char_filter 以外にもいろいろ利用可能ですが,ここで扱うのは char_filter だけです. こんなかんじ icu_normalizer を使うと,「㌶」→「ヘクタール」など,いい感じに変換してくれます. ※ 下の画面は,「Å」→「å 」「㌢」→「セ」「ン」「チ」,「①」→「1」,「⑵」→「(」「2」「)」,「Ⅲ」→「i」「i」「i」となっている例です. インストール github: https://github.com/elasticsearch/elasticsearch-analysis-icu バージョンごとにブランチが切られているので,それぞれのブランチの R
qiita.com
全裸改善:形態素解析器 kagome に go-bindata を使ったらビルド時間とバイナリのサイズが劇的に改善,『全裸で形態素解析スクリプト』もビルドでこけなくなるはず!Gomecab自然言語処理形態素解析kagome 概要 形態素解析器に辞書を同梱するために,辞書構造を go のソースコードに変換して埋め込んでいたのですが,ビルド時間が15〜30分,バイナリサイズも105MBとちょっと問題がありました.そこで,辞書データを一度ファイルに落として,go-bindata を利用してコードに埋め込むことで,ビルド時間も数秒,バイナリサイズも16MBと劇的に改善されました. 変更点 gob を利用して辞書データをファイルに出力 go-bindata で出力された辞書をソースコード化 初期化時に辞書データをinit関数でロード 修正差分:https://github.com/ikawaha/k
概要 辞書データとかちょっとした画像ファイルとか,リソースを定数としてバイナリに持たせておきたいときってありますよね.たとえば,Java なら jar の中にちょっとしたリソースファイルとか含められるじゃないですか.go-bindata はそういった問題を解決するためのツールです.自分用に使い方をまとめたメモなので,違うよ!ってところがあったらご指摘いただけると嬉しいです 出典 下記の README に丁寧に書いてあるので,こちらを読むのが間違いないです. 仕組み go-bindata は(バイナリ)データをプログラムに埋め込むためのツールです. データをコードとして埋め込んで,それらにアクセスできるようなメソッドをつけた go のソースを生成してくれます. データは gzip 圧縮してくれます (しないことも可能です) 生成されたコードを加えてビルドすると,ビルドがとても遅くなってしまう
概要 Kagome(籠目)は Pure Go な日本語形態素解析器のプロトタイプです.辞書をソースにエンコードして同梱しているので,バイナリだけで動作します.辞書データとして,MeCab-IPADICを利用しています. 関連: Pure Go な形態素解析器で実行バイナリに辞書埋め込んだヤツを作ってみた (1) Pure Go な形態素解析器で実行バイナリに辞書埋め込んだヤツを作ってみた (2) 未知語処理編 Pure Go な形態素解析器で実行バイナリに辞書埋め込んだヤツを作ってみた(3) 完結編 ソース インストール
概要 Go にはプロファイリングツールがついているのだけど,何を出力してくれているのかよく分からなかったのでメモ.間違いに気づかれた方いらっしゃったらコメントいただければ幸いです . 出典 Russ Cox さんが下記に書いてくれてました.これを読むのが間違いないです. Russ Cox, Profiling Go Programs CPU Profiling プロファイリング用のコードの埋め込み まず, runtime/pprof を import しておきます.(net/http/pprofというのもあります). CPU Profiling は計測したい実行コードの前でStartCPUProfile()を呼んで,計測終了のタイミングでpprof.StopCPUProfile()を呼びます.終了の方は defer に登録しておけば関数抜けるときに自動で呼ばれるので便利ですが,Ctr-Cと
はじめに DoubleArray を作ったこともあって,ついでに形態素解析器も作ってみようと思い立ち kuromoji を参考に形態素解析器を実装してみました.目標としては,Pure Go で kuromoji みたいな感じ(辞書内包,検索モードあり,スレッドセーフ)を目指します. サンプルプログラム 参考 下記を参考にさせていただきました. kuromoji 日本語入力を支える技術 Mecab 品詞IDの定義 形態素解析のちょー適当な説明 「形態素」が何であるかを議論し出すと面倒なことに巻き込まれそうなので,ここでは MeCab-IPADIC で定義されているものとします.形態素解析のアルゴリズムについては下記の資料などをあたってください. 日本語入力を支える技術 日本語解析ツール MeCab, CaboCha の紹介 用意するもの DoubleArray #前に作ったものを id が記
概要 csvファイルがutf8で書かれてなかったのでgoだけで出来ないか調べてみたメモ. # iconvとかで元ファイルを前処理してから読めばそれでいい気もします・・・. 関連: Go でファイルを1行ずつ読み込む(csv ファイルも) 準備 以下のパッケージを利用しました.利用方法などはこちらを参照ください. "code.google.com/p/go.text/encoding/japanese" "code.google.com/p/go.text/transform" サンプルコード 文字コードがeuc-jpの場合のサンプルです.sjisの場合は★のところを japanese.ShiftJIS.NewDecoder()に変更すれば対応できます. 文字コード変換をかませるだけなので,別にcsvの読み込みじゃなくても汎用的に利用できそうです. package main import (
bufio.Readerで読み込む ReadString 引数にファイルが指定されていれば,ファイルをオープンして1行ずつ読み込みます. 引数が指定されていなければ,標準入力から1行ずつ読み込みます. 追記:ReadString('\n')で読み込むとWindowsの場合\rが残ってしまうのでReadLineの方がいいとのコメントいただきましたので,ReadLine使った版も載せておきました. os.EOFでなくてio.EOFなのがはまりどころでした. Readerはファイルをクローズすれば閉じられるみたいです. package main import ( "bufio" "fmt" "io" "os" ) func main() { var fp *os.File var err error if len(os.Args) < 2 { fp = os.Stdin } else { fmt
/** * 線形回帰サンプル * 参考 : http://gihyo.jp/dev/serial/01/machine-learning/0011?page=1&ard=1400930362 */ package main import ( "code.google.com/p/plotinum/plot" "code.google.com/p/plotinum/plotter" "code.google.com/p/plotinum/plotutil" "code.google.com/p/plotinum/vg" "github.com/skelterjohn/go.matrix" "image/color" "math" ) func defaultBaseFunction(a_x float64) []float64 { return []float64{1, a_x, math.
% go run plotinum_sample.go ../lib/go/src/code.google.com/p/plotinum/vg/vgpdf/vgpdf.go:10:2: cannot find package "bitbucket.org/zombiezen/gopdf/pdf" in any of: /opt/local/go/src/pkg/bitbucket.org/zombiezen/gopdf/pdf (from $GOROOT) /Users/ikuo.kawaharada/lib/go/src/bitbucket.org/zombiezen/gopdf/pdf (from $GOPATH) ../lib/go/src/code.google.com/p/plotinum/vg/vgimg/vgimg.go:12:2: cannot find package "
このページを最初にブックマークしてみませんか?
『@ikawahaのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く