OPENLOGI Advent Calendar 2017- Qiita の6日目の記事です。 「物流の未来を、動かす。」をミッションに、日夜物流の課題に取り組んでいるOPENLOGIのエンジニアの@hmarui66です。 今回は皆さんにも身近な存在である「郵便番号」を取り上げようと思います。 OPENLOGIが取り組んでいる事業の一つである物流代行サービスでは、ECなどで販売された商品を購入者に向けて宅配便で発送する業務がおこなわれています。郵便番号はこの宅配において重要な役割を果たしている存在です。 郵便番号の役割 Wikipedia: 郵便番号に詳しい説明が載っていますので、ここでは軽く触れるだけにします。 郵便番号は郵便物を配送先の地域ごとに分類するために使われており、配送の効率を上げるために役立てられています。番号を割り振っているのは郵便局ですが、その他の配送業者でも広く利用され
「日本語入力を支える技術」(通称「徳永本」)や「高速文字列解析の世界」(通称「岡野原本」)で紹介されている LOUDS というデータ構造を、12回に分けて解説しました。 友達に教える時に使ったもので、練習問題付きです。 実際に紙に書いてやってみるとわかりやすいと思います。 詳解 LOUDS (1) LOUDS とは 詳解 LOUDS (2) ビット列を作ってみる 詳解 LOUDS (3) 0番ノード 詳解 LOUDS (4) ビットの意味 詳解 LOUDS (5) 木構造の復元 詳解 LOUDS (6) インデックスでノードを表す 詳解 LOUDS (7) ノード番号からインデックスを得る 詳解 LOUDS (8) インデックスからノード番号を得る 詳解 LOUDS (9) 子ノードから親ノード 詳解 LOUDS (10) 親ノードから子ノード 詳解 LOUDS (11) 木の検索 詳解
こんにちは、買物情報事業部の荒引 (@a_bicky) です。 業務ではクックパッド特売情報のサーバーサイドや商品検索周りを担当しています。 突然ですが、とある商品検索の機能を使っていて次のようなことが起きたら不思議ですよね。 「ねぎ」で検索したら「たまねぎ」がヒットした! 「ドレッシング」で検索したのに「たまねぎドレッシング」がヒットしない! 「豚 薄切り」で検索したのに「豚ロース肉薄切り」がヒットしない! 「たまご」と「卵」の検索結果が違う! 今回は上記の疑問を解消するために検索の基礎的な内容について説明します。 以下、特売情報の商品を検索することを例に説明しますが、一般的な内容なので「商品」を「レシピ」等に読み替えることも可能です。 大量のページから目的のページを探すための索引 たいていの本の巻末には索引が載っていますよね。特定の内容が載っているページを探す場合、1ページ目から順番に
こんにちは、買物情報事業部の荒引 (@a_bicky) です。 前回、「検索結果の疑問を解消するための検索の基礎」で単語単位でインデキシングする前提で説明しましたが、今回は文などを単語単位で分割するために使う技術である形態素解析について触れます。 形態素解析器には色々ありますが、中でもメジャーと思われる MeCab の仕組みについて説明します。 MeCab の解析精度を上げるために辞書に単語を追加したことのある方もいると思いますが、動作原理を理解することで単語を追加する際に適切な生起コストを設定できるようになったり、学習の際に適切なパラメータを設定できるようになったりするはずです。 なお、MeCab は汎用テキスト変換ツールとしても使用できます が、簡単のため MeCab + IPA 辞書のデフォルト設定前提で説明します。 アジェンダ 形態素解析とは MeCab における最適な解析結果の推
Algoliaを使ってWordPressの全文検索をサジェストできるように設定してみた投稿者: adachin 投稿日: 2020/07/252020/07/25 今更なのですが、デフォのWordPressのサイト内検索機能って正確な文字入力をしないと結果が返ってきません。しかもこのブログの記事数(blog.adachin.me)は約460もあるので、「あのブログなんだっけ…」と目的のブログへ素早く探せないこともあったり、Googleみたいにサジェスト(インスタント検索機能)もされないので、友人が5年前(放置してた…遥か昔…)おすすめしてくれたAlgoliaを使って設定してみました。 ■Whats Algolia? https://www.algolia.com/ クラウドベースの検索プラットフォーム APIで検索フォームを1から作成可能 ユーザーのサイト内での検索クエリを精密に分析可能
MySQL Bugs: #82330: Don't recursively-evaluate stopword after tokenize ngramパーサー を使ってアルファベット混じりの日本語全文検索をしようとすると悲劇が起こる。デフォルトのストップワード一覧は このへん 。 MySQL 5.7.13で全文検索INDEXを使ってるんですけど半角英字でヒットする奴とヒットしないやつが居るんですけどこれって何ででしょう… ちなみに NGRAMを2文字 です。 例えばbabyって単語が含まれてる文章でbabyって単語がヒットしません。 stop wordsには含まれてないんですがなんでだろうと… http://mysql-casual.slackarchive.io/general/-/1466580139/1469433820/1469174336000008/ mysql57> CRE
今回MySQL5.7.22を用いて検証しています。 初期設定 データベース作成 mysql> CREATE DATABASE fts; Query OK, 1 row affected (0.00 sec) mysql> use fts; Database changed テーブル作成 テーブル作成時に全文検索をするカラムの型をFULLTEXTにし、パーサーにngramを指定します。 mysql> CREATE TABLE documents (id SERIAL PRIMARY KEY, content VARCHAR(255), FULLTEXT(content) WITH PARSER ngram) CHARACTER SET utf8; Query OK, 0 rows affected (0.10 sec) レコード挿入 レコードの挿入は通常の文字列同様に入れられます。 mysq
こんにちは、GMOアドマーケティングのK.Mです。 最近は久しぶりにMySQLを使ってます。 そういえばMySQLといえば、バージョン5.7からInnoDBの全文検索機能に日本語パーサーが搭載されとても使いやすくなったと聞いていたので、本日はそれを試してみたいと思います。 以前はサービスで本格的な全文検索をやりたいと思ったら、Elasticsearchなど専用の全文検索エンジンを立てたりとミドルウェア構成が一段リッチになるような印象もありましたが、もう少しお手軽に、既存RDBMSからSELECTしてくるくらいのイメージでスモールスタートしたいようなケースも結構ありそうです。 そういったときに検討できる一つの選択肢になるんじゃないかと思っています。 既存テーブルを検索してみます MySQL5.7から日本語パーサーとしてN-gramとMeCabが使えます。特にN-gramの場合、デフォルトで有
PolyglotとGoogle Cloud Functionで形態素解析apiを作るThursday, March 21, 2019 現在大学の授業で行なっているプロジェクトで英語の文章を形態素に分割することがあったため、pythonのpolyglot を使用し、ついでにgoogle cloud functionでベータ版として提供されているpythonランタイム で形態素解析apiを作成しました。 PolyglotとはPolyglotは英語で多言語話者のことを指すのですが、pythonのpolyglot はその名の通り多数の自然言語を処理するツールを提供するパッケージです。 GoogleのCloud Natural Language Api の構文解析のように文章を品詞分解してくれるパッケージはよくあるのですが、polyglotのように英語の文章を形態素に分解する機能があるものは珍しいの
日本語だと、MeCabとか入れておけば大体大丈夫で日本語での検索も捗るんだけど、英語って言われると…となってしまったので lab.astamuse.co.jp を参考にCentOS7で解析してみる。 インストール とりあえず環境 $ more /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 実行 python-numpyが必要らしい。・・・んだけど、yum listしてみると、python27-numpyしかない。 しかし、んー、27ってついてるけど・・・・ [itoh@localhost ~]$ which python2.7 /bin/python2.7 [itoh@localhost ~]$ which python /bin/python [itoh@localhost ~]$ ls -l /bin/python l
英文の自然言語処理におススメ!お手軽なPolyglotを使ってみた。(http://lab.astamuse.co.jp/entry/try-polyglot) ↑を参考にさせていただきながら、Polyglotを使えるようになるまでの話。別の環境で動かす必要が出てきた時にハマらないようにメモ(環境はAWS Cloud9のAmazon Linux) pipでPolyglotをインストール $ sudo pip install polyglot 英語用のモデルをダウンロードしようとするとICUが無いと言われる $ polyglot download embeddings2.en pos2.en 〜略〜 ModuleNotFoundError: No module named ‘icu’ pyicuを入れようとすると何か色々言われる $ sudo pip install pyicu 〜略〜 Pl
こんにちは。白木(@YojiShiraki)です。デザイナーです。 今日はPythonで英文形態素解析をする上でお手軽便利なpolyglotについて紹介します。 背景 当社ではデータを分析・解析する機会がままありまして、こうしたときに自然言語解析の処理のツールを利用しています。特に最近では英語データが多く、このあたりのツールのニーズが高くなっています。 しかし、いざ英語の解析となると意外に情報がありません。 例えば、日本語の解析ならMeCabやChaSen、Kuromojiといったものはすぐ見つかります。しかし英文の自然言語解析ではTreeTaggerの情報は目につくもののイマイチまとまった情報がありません(このページやこのページに他の選択肢がまとまっていますが)。 おそらくこの領域ではNLTKが王道なのかと思いますが、やや重厚感あります。 そこでもう少しライトなものをということでPoly
英語・語句選択問題検索が品詞による検索に対応しました。この投稿では,自作の検索エンジンで品詞を用いた検索を実現する方法と,そのアルゴリズムについて紹介します。 品詞情報の取得 品詞を用いた検索を実現するためには,検索対象となるデータから品詞情報を抽出する必要があります。品詞情報を抽出する方法は有料・無料のものを含めていくつか選択肢がありますが,ここではオープンソースであるstanzaを使用します。 stanzaを用いた品詞情報の抽出方法については,NLP(自然言語処理) Stanzaによる構文解析の結果を取得するを参照して下さい。言語はpythonを使用します。データベースが大きくなると,かなりの計算時間を要します。 stanzaを用いると,以下のような品詞情報が抽出できます。 Look! There's a dog in the hall. "VB", ".", "EX", "VBZ",
さてさて、前回を除くと最近公開した記事がほぼLaravelの話題がばかりになっていることに気がつきました。Laravelの話題ってホントに尽きないですね😊✨ 常々思っているのですが、私の開発環境は現在ドップリLaravel化してしまい、正直なところネイティブなPHPコードの開発は過去1年間でたった一回だけ(しかも古いサイトの移転のお手伝い)だったので、たまにはPHP全般の話題も、といろいろ考えていました。 すると、まっさきに思い浮かんだのが日本語に関連する話題です。 というのもLaravelももちろん多言語にいろいろと対応はしていますが、さすがに単一国家だけで話されている日本語のみに対応するというのはあまりないはずだと考えたからです。 そして、そんな影響で今回お届けするのは、 PHPで「似ているデータ」を見つけ出す方法 です。 しかも、今回は誰でもシンプルに実行できるように難解な公式や機
目次 MeCabとは MeCabの導入手順 実際に書いてみよう まとめ MeCabとは MeCabはオープンソースの日本語形態素解析エンジンです。 形態素解析とは、テキストデータから品詞や活用などを解析することをいいます。 MeCabを使うことで、日本語のテキストデータから単語を抽出できます。 [PR] PHPを学んで未経験からWebエンジニアを目指す方法とは MeCabの導入手順 PHPでMeCabを利用するために「php-mecab」を使用していきましょう。 ※php-mecabは2020年9月6日時点でMITライセンスです。 ※lamp環境(PHP7)で動作確認をした手順です。 ※tmpディレクトリ にインストールをしていきます。 全体の流れとしては MeCabのインストール 辞書のインストール php-mecabのインストール 導入確認 という流れで進めていきます。 1.MeCab
導入 PHPにはsimilar_textやlevenshteinといった、2つの文字列の類似度を計算するための関数があります。しかしこれらはマルチバイトを考慮しておらず、とりわけUTF-8バイト列に対しては計算精度が悪化するという特徴があります。そこで今回はUTF-8マルチバイト対応版のlevenshtein_utf8という関数を作ってみることにしました。なおsimilar_textの方は計算量が大きすぎてPHPレベルで実装するに堪えないので、今回はパスということで… 既に@suinさんの「mb_levenshtein 二つの文字列のレーベンシュタイン距離を計算する(マルチバイト対応版)」は拝見しましたが、文字種による制約がかかると実用的ではないので、@itcomさんがコメントされているように素直な実装を行いました。といってもほとんどphp-srcからのパクりですが。 距離の正規化に関して
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く