概要
改行区切りの単語テキストから、正規表現で表される特定の単語を抽出する方法を試行錯誤しました。
今回は、漢字が4文字で構成される単語(四字熟語)を抽出します。
前処理
Wikipediaタイトルのダウンロード
今回は、データベースとしてWikipedia日本語版のタイトル一覧のテキストファイルを用いました。
Wikipediaのダウンロードできるデータファイル一覧 | mwSoft
こちらに一覧があり、その中で
jawiki-latest-all-titles-in-ns0.gz
が全ページのタイトルを記述したテキストファイルとなります。
こちらのアーカイブから、最新のタイトル一覧をダウンロードします。
漢字から始まる単語の抽出
Sublime Text 2で単語を抽出していきます。
正規表現の候補を減らす前処理として、ひらがな等を含む単語が不要となるため、
漢字から始まる行だけを抜き出しておきます。
Macの場合、漢字で始まる最初の行で
fn + Shift + 左キー
を押せば、そこから先頭までが選択されるので、それで選択された項目を削除します。
同様に、漢字で始まる最後の行で
fn + Shift + 右キー
を押して、末尾側の単語を削除します。
このようにして、以下のようなテキストが抽出されます。
一
一_(緑茶飲料)
一_茶花
一〇〇式
一〇〇式三十七粍戦車砲
...
龜山鄉
龜田鵬齋
龜部
龝吉敏子
龠部
1531190行から766756行に削減されました。
四字熟語の抽出
Sublime Textの正規表現で、テキストを直接「抽出」することができないため、
置換をうまく使って不要な単語を削除していきます。
四字熟語に該当する行に"__"とフラグを付けて、フラグが立っていない行を削除します。
まずは普通の検索でテキストファイル内に"__"を検索して存在しないことを確認します。
("__"があった場合は"___"とアンダースコアを増やしていって対応)
漢字のエリアは[一-龥]となっております。そのエリアの文字が4つ並んでいる行の先頭に"__"を付与します。
Find: ^([一-龥]{4})$
Replace: __$1
金沢地方裁判所
金沢地方裁判所七尾支部
金沢地方裁判所小松支部
金沢地方裁判所輪島支部
__金沢地裁
金沢地裁七尾支部
金沢地裁小松支部
金沢地裁輪島支部
金沢城
金沢城公園
金沢外環状道路
金沢大
__金沢大学
金沢大学の人物一覧
金沢大学アカンサス・スカラシップ制度
のように4文字の漢字文字列の先頭に"__"が付きます。
__から始まらない行の文字列と改行コードを削除します。
Find: ^(?!__).*$\n
Replace: (空白)
__金沢地裁
__金沢大学
__金沢大将
__金沢孝史
__金沢実政
__金沢実時
__金沢実泰
__金沢家裁
__金沢寛明
__金沢寿一
のようなテキストになります。
先頭のフラグを除去します。
Find: ^__
Replace: (空白)
177435単語が抽出されました。
なお、11文字以上のときは1.のステップで繰り返し数を以下のように指定します。
Find: ^([一-龥]{11,})$
Replace: __$1
分析
2015-03-13のデータで軽く分析しました。
単語数の表
文字数(n文字熟語) | 単語数 |
---|---|
2文字 | 45135単語 |
3文字 | 109674単語 |
4文字 | 177435単語 |
5文字 | 64235単語 |
6文字 | 31302単語 |
7文字 | 18288単語 |
8文字 | 13842単語 |
9文字 | 14129単語 |
10文字 | 10165単語 |
11文字以上 | 13121単語 |
長い単語ランキング
1位
四條畷都市計画事業田原特定土地区画整理土地区画整理促進区域事業 (31文字)
2位
高知県宿毛市愛媛県南宇和郡愛南町篠山小中学校組合立篠山中学校 (30文字)
高知県宿毛市愛媛県南宇和郡愛南町篠山小中学校組合立篠山小学校 (30文字)
4位
社会福祉士介護福祉士学校職業能力開発校等養成施設指定規則 (27文字)
5位
八分字村藤富村並建村飽託中央中学校組合立飽託中央中学校 (28文字)
「四條畷都市計画事業田原特定土地区画整理土地区画整理促進区域事業」が漢字だけの一番長いWikipedia項目でした。これはトリビアですね!でも到底憶えられませんね!(関係者はみんな言えるのでしょうか…?)
その他気づき
- 2字はまともな熟語が多い
- 3字は人名・地名が多い
- 4字はとにかく人名が多い
- 8文字以上は学校・施設の名前が多い(○○小学校など)