MeCab との違い
Suzume は MeCab とは根本的に異なるアプローチで日本語トークン化を行います。このページでは、2 つのツールがどこで結合・分割するかというトークン境界の意図的な違いと、既知の制約、使い分けの指針を説明します。
意図的な差異の正本は、テスト期待値の生成に使う Python の MeCab 正規化パイプラインです。以下では、その規則群を利用目的ごとにまとめて説明します。
比較条件
このページの MeCab の境界と表示する素性は、すべて MeCab 0.996 と mecab-ipadic 2.7.0-20070801(UTF-8 版 IPA 辞書)の出力から記録しています。ラベルは読みやすいように MeCab のカンマ区切り素性を略記していますが、トークン境界は書き換えていません。mecab を既定の設定で実行し、ユーザー辞書は読み込んでいません。使用中の設定は次のコマンドで確認できます。
mecab --version
mecab -DMeCab の出力は、選択した辞書、そのコスト、ユーザー辞書によって変わります。UniDic、NEologd、カスタマイズした IPA 辞書では、このページと異なる境界や品詞になることがあります。上記の正規化パイプラインは、この IPA 辞書の出力を起点に、Suzume の一般化した比較規則を適用してテスト期待値を生成します。
品詞ラベルの違いを探していますか?
このページはトークンの区切り位置を扱います。同じトークンに対する品詞の付け方の違い — 代名詞、ナ形容詞、助動詞などの分類 — は POS 分類の違いを参照してください。
比較の読み方
各比較では、MeCab 行に MeCab の日本語品詞名、Suzume 行に公開 API のタグ(NOUN、VERB、ADJ など)を、コードごとに日本語の品詞名を併記して示します。各トークンには品詞色のアンダーラインが付くので、2つのトークナイザーがどこで分割・結合するかが一目で分かります。
設計思想
Suzume はトークナイザーであり、形態素解析器ではありません
MeCab は形態素解析器です — テキストを形態素に分解し、詳細な文法情報を付与することを目的としています。Suzume はトークナイザーです — 検索、表示、テキスト処理などの実用的なアプリケーションのために、テキストを意味のある単位に分割することを目的としています。形態素解析は Suzume の目標ではありません。この目的の根本的な違いが、以下に述べる多くの動作の違いを説明しています。
| MeCab | Suzume | |
|---|---|---|
| アプローチ | 辞書駆動型 | 特徴量駆動型 |
| 辞書 | 外部辞書が必要。サイズと出力は選択した辞書に依存 | コンパクトな辞書を同梱(WASM 込みで gzip 約 227KiB) |
| 未知語 | 文字種にフォールバック | パターンベースの候補生成 |
| 複合語 | 選択した辞書に基づく境界 | 辞書と構造規則。未知の連続列は結合する場合あり |
| 対象 | 辞書に基づく詳細な解析 | ブラウザ・エッジ・ネイティブでのコンパクトな検索・表示用トークン化 |
基本的なトレードオフ
MeCab は選択した辞書のエントリとコストに従うため、辞書を変えると境界や品詞も変わり得ます。Suzume はコンパクトな辞書と、文字種・文法・接続の共通規則を組み合わせます。内部境界の根拠がない未知の同一文字種列は、結合したままになる場合があります。
結合ルール
辞書駆動の解析では分割される並び、あるいは断片化しても検索単位として役に立たない並びを、1つのトークンとして保持する規則です。
漢字複合語
辞書や文法規則から内部境界を判断できない未登録の漢字列は、通常1つの名詞候補として保持します。一方で 神奈川県 / 横浜市 や 会議 / 中 のような構造上の境界は分割します。
カタカナ複合語
未知の一般的なカタカナ列は、通常1つの名詞候補として保持します。辞書や形状規則に根拠があれば、「ドキドキ(ADV)」のように別の品詞を付与します。
文字種をまたぐ複合語
英字語に続くカタカナ語は1つの複合名詞になります。
数字と単位
基数に助数詞・単位が続く場合は、通常1つの数量トークンに結合します。大きな数値単位(万、億、兆)、小数、パーセント、アルファベット単位にも対応します。ただし序数や構造接尾辞の規則により、第三 / 回 のように分割する場合があります。
数量の前後には検索単位としての境界を維持します。
カンマで桁を区切った数値は、数値全体を一語として扱います。後続する助数詞は独立した SUFFIX にし、金額は一つの検索単位にまとめます。
同じ結合はアラビア数字以外にも適用されます。
かな表記の数量:
配分表現の数量:
番地・地番:
序数の「第」と概数の「約」: 序数接頭辞の「第」は数字と結合し、後続の助数詞は独立した SUFFIX トークンになります。概数接頭辞の「約」は逆に独立した PREFIX のまま、数字が助数詞と結合します。
日付
完全な日付表現は単一トークンに結合されます。
固有名詞と地名
地名構成要素と地域接尾辞の多くは結合します。ただし 県+市 は構造規則による例外で、都道府県と市を分割します。
地名
複合動詞
連用形の動詞語幹に続く補助動詞は、複合動詞として結合されます。
対応するV2要素: 込む、出す、続く、返す、合う、直す、切る、上がる、抜く、こもる、続ける、つける、替える、合わせる、上げる、下げる、掛ける、入れる 等(40以上のパターン)
「過ぎる」「かねる」のような文法化した補助要素は意図的に結合しません — 補助動詞の分割を参照してください。
閉じた複合助詞
1つの助詞として機能する閉じた表現は、全体を1トークンに保ちます。
採用した IPA 辞書では「と共に」や、文脈によっては「につれて」も最初から 1 トークンになるため、この比較条件では境界差として掲載しません。別の辞書では分割される場合があります。
否定の「ずに」
否定の助動詞「ず」と後続する助詞「に」は、複合的な文法単位として結合します。
希望の「たがる」
希望を外から観察して述べる助動詞「たがる」は、活用形を含めて単一の助動詞トークンとして扱います。
一語扱いの機能語
固定的な機能語は、辞書駆動の解析で断片化される場合でも一語として保持します。
「〜のついでに」を表す「がてら」は1つの助詞、口語の「そんなら」は1つの接続詞です。
動詞連用形からの複合名詞
動詞の連用形+「会」、および行き先を表す「行き」は、1つの名詞になります。
ナイ形容詞
「ない」で終わる特定の形容詞は、分割せず単一の語彙として扱います。
単一語として処理する主な例: だらしない、つまらない、もったいない、くだらない、いたたまれない、ものたりない、こころもとない
これは閉じた語彙リストです。生産的な「語幹+ない」の組み合わせは分割します — 生産的な否定の分割を参照してください。
スラング・現代語
現代の口語的な形容詞・動詞をネイティブに認識します。
認識例: エモい、キモい、ウザい、ダサい、イタい、ヤバい、これらのひらがな表記、複合イ形容詞
動詞の認識例: バズる、ググる、パクる
タリ活用副詞
タリ活用の副詞語幹に「と」が続く場合、単一の副詞に結合されます。
対象語幹: 泰然、堂々、悠々、淡々、粛々、颯爽、毅然、漫然、茫然、呆然、唖然、愕然、断然、俄然、歴然、整然、雑然、騒然、憮然、黙然、昂然、凛然、厳然
名詞+一字接尾辞
次の限定された名詞+一字接尾辞の組み合わせを結合します。
対象接尾辞: 書、誌、時、率、性
動詞連用形+「方」
短い動詞連用形に形式名詞「方」が続く場合、方法を表す単一の検索単位に結合します。
結合するのは短い語幹だけです。連用形が2文字以内の場合に限られます(走り方、やり方)。長い連用形は境界を維持し、「打ち合わせ方」は「打ち合わせ / 方」のままです。
ひらがなの日常語
ひらがな表記が一般的な日常語は、パターン規則と小さな L2 辞書を組み合わせて一語のまま扱います。パターン規則は「おととい」「ひこうき」「みっつ」や「翌営業日」のような暦の複合語を処理します。「みず」「てがみ」「ひらがな」「にわ」「いりぐち」「はにわ」「あけぼの」「くだもの」のように、助詞や活用語尾と同じ文字を含む曖昧な名詞には辞書の語彙情報を使います。
長音記号
長音記号(ー)は前のトークンに結合されます。
テクニカルテキスト
技術的な識別子は単一トークンに結合されます。
snake_case識別子:
バージョン番号:
ASCII名+番号:
ASCIIドット記法:
ASCII 語中の区切り記号:
ASCII の単語文字に挟まれたアポストロフィ、アンパサンド、スラッシュも同じ規則で 1 トークンに保ちます。
URL・メンション・ハッシュタグ
URL、@メンション、#ハッシュタグは単一トークンに結合されます。日本語を含むハッシュタグも一語として保持されます。
分割ルール
Suzume は辞書駆動の解析にはない境界も引きます。また、境界が意味を持つ場所では、自身の結合ルールを意図的に止めます。
お・ご接頭辞
Suzume はお/ごの敬語接頭辞を名詞から分割しますが、不可分な語彙の場合は結合を維持します。
分割 — 分離可能な接頭辞
不可分な例外語(MeCab と Suzume で同じく一語のため、差異例には掲載しません): お金、お前、おかず、おでん、おもちゃ、おすすめ、おいら、おっさん、お疲れ様、お出で/おいで、および家族語(お母さん、お父さん、お兄ちゃん、お姉さん、おじさん、おばさん、おじいさん、おばあさん等)
敬称とひらがな愛称
敬称は名前から分割されます。
対象敬称: さん、ちゃん、様、君、殿、さま
例外: お兄ちゃん、お母さんなどの家族語と、「皆様」「皆さん」は単一トークンとして維持されます。
2〜3文字のひらがな語幹に「ちゃん」「くん」が続く短い愛称や、辞書化された家族語は検索単位として結合する場合があります。通常の「さん」は独立した接尾辞のままで、漢字語幹の名前でも敬称を分離します。
補助動詞の分割
文法化した補助要素 — 過ぎる(過度)、かねる(不可能)、そびれる(機会逸失)、尽くす(完遂) — は本動詞から分割し AUX を付与します。結合される語彙的な複合動詞とは対照的です。MeCab 自身の扱いも辞書によって揺れがあり、結合される組み合わせ(飲み過ぎ)と、非自立サブカテゴリで分割される組み合わせがあります。
口語の強調助詞
口語の強調助詞は、断片化させずに1つの単位として分割します。
ったら題目助詞:
ってば強調助詞:
生産的な機能語の連鎖
生産的な構文は、綴り全体を固定した機能語とせず、内部の動詞・助詞境界を保ちます。
「をもって」も同じ規則で「を / もっ / て」になります。生産的な動詞境界を含まない閉じた表現は、上の「や否や」のように全体を保ちます。
副詞的名詞+助詞
比較辞書が1つの機能語として語彙化する一部の並びを、名詞+助詞のまま保持します。
先頭の固定単位
連体詞「わが」は後続の名詞から分割します。「以下」「程度」のような固定単位も、隣接する名詞から独立したトークンを維持します。
動詞連用形+生産的接尾辞
動詞語幹に付く生産的な接尾辞 — がち(傾向)、たて(直後)、っぱなし(放置) — は境界を維持して SUFFIX を付与するため、動詞語幹は原形付きで検索可能なままです。
否定構文の「読みっこない」も同じ方針で、読み(VERB)/ っこ(SUFFIX)/ ない(ADJ)に分かれます。
数量・状態の接尾辞
Suzume は漢字複合語を積極的に結合しますが、生産的な数量・状態の接尾辞は境界を維持して SUFFIX を付与します。
名詞化の「さ」のように境界を変えずにラベルだけ変わる接尾辞は、POS 分類の違いで扱います。
生産的な否定の分割
閉じた語彙リストのナイ形容詞とは異なり、生産的な「語幹+ない」の組み合わせは分割し、語幹を検索可能に保ちます。
漢語+「として」
「依然として」のような固定したタリ副詞構文は、MeCab では1つの副詞です。Suzume は副詞形と「する」の活用を分割します。「名詞として」のような生産的な表現は、どちらの解析器でも文法境界を持ちます。
県+市
県+市の複合名詞は行政区画の境界で分割されます。
県/市の境界で分割
注: この分割ルールは 県+市 パターンにのみ適用されます。都+区(東京都新宿区)や 府+市(大阪府大阪市)などの組み合わせは、固有名詞と地名の結合ルールにより単一トークンに結合されます。
文語・古風な語尾
文語の活用も現代語と同じ方針で文法境界を保ちます。否定、推量・当為、過去・完了、禁止、命令の各系列を扱います。例を挙げます。
- 文語否定の「ぬ」は未然形から分割: 知らぬ → 知ら+ぬ(
AUX) - 文語的な「ん」も同様に分割: 乗り越えん → 乗り越え+ん(
AUX) - 文語過去の「き」も独立した助動詞境界を保つ: 行かざりき → 行か+ざり+き
正規化
辞書出力が同等の形の間で揺れる場合でも、Suzume は文法構文を一貫した1つの形に正規化します。
内容を持つ記号と句読点
通貨・単位記号、矢印、数学・技術記号、絵文字は、既定の出力でも OTHER として残ります。これらはテキストの内容を持つため、対応する文字範囲もトークンのオフセットに含まれます。句読点などは SYMBOL として扱い、既定では省略します。出力に残すには preserveSymbols を有効にします。
| オプション | 価格は€50🎉。 |
|---|---|
| 既定 | 価格(NOUN) / は(PARTICLE) / €(OTHER) / 50(NOUN) / 🎉(OTHER) |
preserveSymbols: true | 価格(NOUN) / は(PARTICLE) / €(OTHER) / 50(NOUN) / 🎉(OTHER) / 。(SYMBOL) |
コピュラ否定
名詞述語の後では、「じゃ」をコピュラ、「ない」を否定の助動詞として扱います。単独の「じゃない」は曖昧で、1 つの形容詞トークンになる場合があるため、比較には名詞側も含めます。
使役受身
MeCab は五段動詞の未然形+使役「さ」を1トークンに結合する場合があります。Suzume はこの不整合を正規化します。
定型あいづちの分解
フィラーとして語彙化された定型の会話フレーズは、文法要素に分解します。
形式名詞「ふう」
指示連体詞に続く「ふうに」は、連体詞・形式名詞・助詞という文法単位に分割します。
不定の「か」
疑問代名詞に付く不定の「か」は代名詞から分割し、その後の存在動詞「いる」は本動詞として扱います。
制約
Suzume の特徴量ベースアーキテクチャに起因する既知の制限事項です。
結合された複合語の分割不可
Suzume は、未知の同一文字種複合語の内部にある任意の語彙境界を推測できません。ただし、文法規則やコンパクトな辞書で根拠のある境界は分割できます。
Suzume は内部境界を判定できず、MeCab は辞書に基づいて分割します
回避策: アプリケーションで必要な境界は、ユーザー辞書ガイドの実行時読み込み例を使って登録します。JavaScript、Python、Go、C++、C、ネイティブ CLI の例を掲載しています。
使い分けの指針
| ユースケース | 推奨 |
|---|---|
| ブラウザ / クライアントサイドアプリ | Suzume — サーバー不要 |
| 検索インデックス / タグ抽出 | Suzume — 複合語結合がむしろ有利 |
| 特定の MeCab 辞書/コーパスとの互換性 | MeCab — その辞書の境界と品詞体系を維持 |
| リアルタイム UI(入力中の処理) | Suzume — 高速、ネットワーク遅延なし |
| 辞書で定義された複合語分割 | MeCab — 選択した辞書に基づく境界判定 |
| 辞書にない語へのパターン候補 | Suzume — 語彙エントリがない文字列も解析可能 |