それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

日本語(ローマ字)表記をひらがなにする。

日本語(ローマ字)表記をひらがなにしたい

「shatiku → しゃちく」 にしたい

本日の目的 ローマ字で表現された名前を変換したい。

hatarakusaibou のような名前を ’はたらくさいぼう’のようにひらがな表記に変えたい。

ローマ字を'ひらがな'に変換できれば、ひらがなから漢字にできるかもしれない。

ローマ字→ひらがな→漢字 に変換できればいいよね。

力技もある。

tr 使えばできそうよね。正規表現でパターン網羅すれば良いわけですし。

力技で、 'kakikukeko' を 'かきくけこ' に tr すればいいと思ったけども 変換テーブル用意するのも、めんどくさい

調べたら。 romkan という gem があった

使ってみる

bundle add romkan
require 'romkan'
puts "kitakyuushuu".to_kana

実行結果

$ bundle exec ruby sample.rb 
きたきゅうしゅう

お、行けそう。

使うときの注意点

意外と使い所が難しい。

  • waha にする
  • アルファベットの大文字が混じるとおかしくなるので、事前に小文字化しておくと良い
  • 英単語と混じってる場合、スペースなどの区切りで置換対象から除外する。
  • 子音が連続する単語は置換から除外する。

大文字が行頭に混じると困る。例

>> 'Osaka Namba'.to_hepburn.to_kana
=> "Oさか Nあmば"

小文字にするとまだまし

>> 'Osaka Namba'.downcase.to_hepburn.to_kana
=> "おさか なmば"

それでも 難波を Namba と表記されると辛いし、大阪をOsakaと表記されると辛い。

英単語混じりはつらい

たとえば、 Death March からはじまる異世界をローマ字とすると、次のようになる。

>> text = 'Death_March_kara_Hajimaru_Isekai_Kyousoukyoku'
>> puts text.downcase.gsub(/_/,' ').gsub(/ wa /, 'ha').gsub(/\s|_/,'').to_hepburn.to_kana
=> "であthまrchからはじまるいせかいきょうそうきょく"

連続する単語を置換するには厳しそうだ。

子音(小文字)が連続する単語や、末尾が子音で終わる単語を置換対象から外すというヒューリスティックな解決策しかなさそう。

text = 'Death_March_kara_Hajimaru_Isekai_Kyousoukyoku'
puts text = text.downcase.gsub(/_/,' ')
                .gsub(/ wa /, 'ha')
                .split(/\s+/)
                .map{|e| e=e.to_hepburn.to_kana unless  e=~/[^aiueon]$/ ; e   }
                .join(' ')
# => death march から はじまる いせかい きょうそうきょく

こんな感じ??

母音の連続は扱えない

連続する母音は、省略表記されることが多いのだけど、これをうまく扱う方法が思いつかない。

'osaka'.to_kana
#=> "おさか"
>> 'kyushu'.to_kana
=> "きゅしゅ"

なんに使うの?

日本語のローマ字で書かれた、大量のPDFがあったり、HTMLファイルがあったり、テーブル定義があったりします。 読みにくくて仕方がないので、ひらがな・漢字に変換できれば便利になるよね。

参考資料

ruby - mecab をインストールするときにエラーが出たのでメモ

mecab - ruby を使いたい

久しぶりにmecab をインストールしようとしたら・・・

bundle add mecab 

エラーになるんですね。

extconf.rb:12:in ``': No such file or directory - mecab-config

mecab は extconf で外部ライブラリ(.h)を参照するので、 mecabのインストールが必要でした。

エラーの原因:mecab が未インストールでした。

わたしは、macOS なので brew install します。

takuya@$ brew info mecab
mecab: stable 0.996 (bottled)
Yet another part-of-speech and morphological analyzer
https://taku910.github.io/mecab/
Conflicts with:
  mecab-ko (because both install mecab binaries)
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mecab.rb

ああ、not installed だ。ずいぶん長い間使ってなかったんですね。つまりMacにしてから数年間一度もmacで使ってないわけだ。

mecab 本体のインストール

brew install mecab
brew install mecab-ipadic

これでインストールは完了

ruby mecab のインストール

bundle add mecab

無事終了しました。

Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Using bundler 1.16.2
Fetching mecab 0.996
Installing mecab 0.996 with native extensions
Using romkan 0.4.0
Bundle complete! 2 Gemfile dependencies, 3 gems now installed.
Bundled gems are installed into `./vendor/bundle`

起動テストをします。

動かしてみます。

require 'mecab'
m = MeCab::Tagger.create("-Ochasen")
puts m.parse ("shachou")
bundle exec ruby sample.rb 
shachou shachou shachou 名詞-固有名詞-組織              
EOS

オッケ。

gem install でシステムに依存しない extconf にしてくれたら嬉しいんだけどなぁ。

Wordpressでユーザーテーブル共有

めんどくさい

実験用にWordpressを作るけど毎回毎回、ユーザー作成がめんどくさい。

そうだ、ユーザーテーブルは使いまわしてしまおう。

wp-config だけで解決する

1つ目のWordpress

$table_prefix  = 'blog1_';
define('CUSTOM_USER_TABLE','XXX_wp_users');
define('CUSTOM_USER_META_TABLE','XXX_wp_users');

2つめのWordpress

define('CUSTOM_USER_TABLE','XXX_wp_users');
define('CUSTOM_USER_META_TABLE','XXX_wp_users');
$table_prefix  = 'blog2_';

2つのWordpressでテーブル共有

DB設定はもちろん共有。ユーザ関連だけ共通にする。

権限はブログ事になるので、設定が必要

インストール後にやること

初期設定終わったら、管理権限を与える。 管理者権限はブログ毎に管理されるので、ブログ毎に管理者権限を与えればいい。

既存のWordpressのユーザーを統合するときに問題点

既存のWordpressを統合するなら、投稿者データの紐づけに注意しながらテーブルを混ぜてしまえばいい。ただ、ユーザーテーブルは意外とシンプルで primary key ( auto increment ) かぶりにだけ注意したら簡単に既存のテーブルを統合できた。

新規で作るなら管理者権限を付与すればいんだよね。

実際にやってみたけどめっちゃ簡単なのでおすすめ。

ちゃんとマニュアルに書いてあるんですよね

そうおもうと、Wordpress関連のエントリの情報密度の薄いことと言ったら。。。

参考資料

https://codex.wordpress.org/Editing_wp-config.php