教材 / テキスト

ゼロから学ぶ正規表現による
中国語テキスト検索・分析入門

Pulsar エディタ・Python・jiebaを使って、自分でデータを作り、自在に検索・分析する

データ収集 第5章 整形・管理 第5章 検索・抽出 第4・6章 分析・考察 第6・7章

本書は、中国語の研究・学習に関心を持つ方が、自分でデータを集め、整形し、正規表現を使って検索・分析できるようになることを目指した実践的なテキストです。プログラミングの知識がなくても第4章まで学べます。Pythonは第5章以降で、必要な場面で少しずつ紹介します。

第1章
正規表現とは何か

1.1 正規表現って何?

正規表現(Regular Expression、略して regex)とは、文字列のパターンを記号で表現する方法です。「任意の1文字」「0回以上の繰り返し」「行の先頭」といった条件を、特定の記号(メタ文字)で書き表します。

たとえば「結婚という2文字の間に何か1文字入っているもの」を探したいとき、正規表現では:

结.婚
マッチ:结了婚 结过婚 结完婚
非マッチ:结婚(間に文字なし) 结了两次婚(2文字以上)

.(ピリオド)が「任意の1文字」を表しています。このように、記号1つで「どんな文字でもいい」という条件を表現できるのが正規表現の力です。

「正規表現」= パターンを記号で書く 人間が言いたいこと 「结」と「婚」の間に ちょうど1文字入っているもの を全部見つけたい 正規表現で書くと 结.婚 固定 . 任意1文字 固定

1.2 何ができるのか・できないこと

できること

  • 柔軟な検索:完全一致でなく「パターン」で探す
  • 一括置換:データの整形・クリーニング
  • 抽出:本文・セリフ・特定構造の文だけを取り出す
  • 複数ファイル横断検索(Grep):数百ファイルを一度にスキャン
  • 繰り返し処理の自動化:Pythonと組み合わせれば何千ファイルも

苦手なこと・できないこと

  • 意味的な検索:「怒りを表す表現」などは意味を理解できない
  • 深いネスト構造の完全解析:HTMLの複雑な入れ子には限界がある
  • 完璧な精度:意図しないものがヒットすることもある(試行錯誤が必要)
📌
正規表現は「完璧な道具」ではなく「賢い近道」です。大事なのは何ができて何ができないかを理解した上で使うことです。

1.3 Ctrl+F との違い

Ctrl+F vs 正規表現 Ctrl+F(普通の検索) 正規表現 「北京」を探す ○ できる 「北京」を探す ○ できる 北京/上海/广州を一度に探す △ 3回繰り返す必要 北京|上海|广州 ○ 1回で検索 结___婚(間に何か入る形) ✗ できない 结.{1,3}婚 ○ できる 100ファイルを一度に検索 ✗ できない Grep検索で一括 ○ できる HTMLタグを一括削除 ✗ できない <[^>]+> → 空欄に置換 ○ できる

1.4 なぜ中国語研究に向いているのか

英語はスペースで単語が区切られているため、単語単位の検索が比較的簡単です。しかし中国語はスペースで区切られていません。「结」という文字が「结婚」の一部なのか「结束」の一部なのか、文字だけでは判断できません。

また中国語には離合詞(「结婚」→「结了婚」)、呼応形式(「虽然…但是」)、重ね型(「看看」「高高兴兴」)など、パターン的な文法形式が豊富です。これらはまさに正規表現が得意とする「構造的なパターンの検索」に向いています。

💡
正規表現は中国語の研究に特に強力です。離合詞・呼応形式・畳語のような「形が変わるパターン」を一気に収集できます。
第2章
Pulsarを使ってみよう

2.1 インストールと設定

本書ではPulsar(旧Atom)を使います。無料・オープンソースで、Windows・Mac・Linux すべてに対応しています。

  1. https://pulsar-edit.dev/ にアクセス
  2. お使いのOSに合わせてダウンロード
  3. インストーラーを実行(指示に従うだけ)
  4. 起動後、File → Add Project Folder でデータフォルダを開く

2.2 画面の説明

Pulsar — novel_sample.txt
📁 Chinese-Data
📁 LAOSHE
📄 sishi01.txt
📄 sishi02.txt
📁 LUXUN
周锦渊待过最大的集体就是道观,
他都不知道是不是所有单位都像三医院一样。
弥漫着奇怪的八卦风气,而且具有浓烈的时代气息。
"就是他啊,基本没什么病人,在诊室里打坐?"
"画符的是不是他?"
検索:
是.{2,8}的
← 正規表現モード ON
置換:
$1\n
⚠️
検索バー右側の 「.*」ボタンをクリックして正規表現モードをオンにしないと、.* が記号ではなくそのままの文字として検索されます。必ずオンにしてから使いましょう。

2.3 最初の検索を試す

ステップ1:サンプルテキストを作る

メモ帳やPulsarで以下の内容を sample.txt(UTF-8)として保存してください:

他是昨天去的北京。
我是在上海出生的。
她是坐飞机来的。
这是我的书。
我们是好朋友。

ステップ2:検索してみる

  1. Pulsarで sample.txt を開く
  2. Ctrl+F(Mac: Cmd+F)で検索パネルを開く
  3. .* ボタンをクリックして正規表現モードをオン
  4. 検索欄に 是.+的 と入力
  5. ハイライトされた部分を確認する
🖊 練習2
Q1上のsample.txtで 是.+的 を検索すると何行ヒットしますか。
Q2^我 を検索すると何行ヒットしますか(^ の意味を考えてみましょう)。
Q3。$ を検索すると何行ヒットしますか。
解答 Q1: 3行(「是昨天去的」「是在上海出生的」「是坐飞机来的」)/ Q2: 2行(行頭が「我」の行)/ Q3: 5行(すべての行)
第3章
正規表現の基本記号を覚える
🔑
この章では記号を1つずつ学びます。必ずPulsarで実際に試しながら読んでください。 手を動かすことが一番の近道です。

3.1 任意の1文字:.(ピリオド)

. は「改行以外の任意の1文字」にマッチします。

「.」(ピリオド)= 任意の1文字 结 . 婚 固定文字「结」 任意の1文字(何でもOK) 固定文字「婚」 ✓ マッチする ✗ マッチしない 结婚 (間が0文字) 结了两次婚 (間が3文字)
検索式意味マッチ例非マッチ例
结.婚ちょうど1文字结了婚、结过婚结婚、结了两次婚
这.是ちょうど1文字这不是、这就是这是
一..二ちょうど2文字一干二净、一来二去一二、一不二
结...婚ちょうど3文字结了两次婚结了婚

3.2 繰り返し:* + ? {n,m}

繰り返しメタ文字の比較 * 0回以上 (0回も含む) 结.*婚 + 1回以上 (0回は含まない) 回.+来 ? 0回または1回 (あってもなくてもよい) 结.?婚 {n,m} n回以上m回以下 (範囲指定) .{4,8} マッチ例: 结婚 ✓ 结了婚 ✓ 结过一次婚 ✓ 回家来 ✓ 回北京来 ✓ 回来 ✗ 结婚 ✓ 结了婚 ✓ 结过婚 ✗ abcd ✓ (4文字) abcdefgh ✓ (8文字) abc ✗ (3文字) {} のバリエーション: {3} ちょうど3回   {2,} 2回以上(上限なし)   {,5} 5回以下

3.3 文字クラス:[][^]

[] は「この中の文字のどれか1文字」にマッチします。

[] と [^] の違い [啊吧呢嘛哦] ブラケット内のどれか1文字 ✓ 啊 ✓ 吧 ✓ 呢 ✓ 嘛 ✓ 哦 ✗ 了(ブラケット外) [^,。?!] 句読点以外の1文字 ✓ 他(句読点でない) ✓ 是 ✓ 的 ✓ 了 ✗ 。(句点) ✗ ,(読点)
💡
[^,。?!]+ は「句読点をまたがせない」ための最重要パターンです。「このフレーズは1つの文の中に収まっているはず」という制限を加えるときに使います。第4章で頻繁に登場します。
書き方意味
[啊吧呢]このうちの任意の1文字啊か吧か呢
[0-9]半角数字1文字(範囲指定)0〜9のどれか
[a-zA-Z]英字1文字aからzまたはAからZ
[一-龠]漢字1文字(概算範囲)漢字のおおよその範囲
[^,。?!]句読点以外の1文字句点が出るまでマッチ
[^0-9]数字以外の1文字数字でなければ何でも

3.4 行頭・行末:^$

^ = 行頭  $ = 行末 "就是他啊,基本没什么病人,在诊室里打坐?" ^ 行頭にマッチ $ 行末にマッチ 例: ^" 引用符で始まる行(セリフ行) 。$ 句点で終わる行
記号意味使用例何にマッチするか
^行の先頭^"引用符で始まる行(セリフ行の抽出)
$行の末尾。$句点で終わる行
^\n空行^\n空行(削除するときに使う)
^不行頭が「不」^不否定文の行

3.5 グループ・選択・後方参照:() | \1 $1

() の2つの使い方 使い方①:グループ化・選択 (但是|可是|不过) 「|」はAまたはB ✓ 但是 ✓ 可是 ✓ 不过 ✗ 但是不过(複合) 使い方②:後方参照(畳語の検索) (.)\1 ()でキャプチャ → \1で再参照 ✓ 看看(看+看) ✓ 好好(好+好) ✓ 天天(天+天) ✗ 高兴(異なる2文字)
⚠️
後方参照の書き方がPulsarでは2種類あります:
検索ボックス\1(バックスラッシュ+数字)
置換ボックス$1(ドル記号+数字)
混同しやすいので注意してください。

置換での後方参照の使い方

検索置換効果
([。!?])$1\n句点の後に改行を挿入(1文1行化)
<b>(.+?)</b>$1<b>タグを除去してテキストだけ残す
(\S+)\s(\S+)$2 $1空白区切りの2語を入れ替え

3.6 貪欲マッチと非貪欲マッチ

これは正規表現で最もつまずきやすいポイントです。

貪欲 vs 非貪欲 vs 否定文字クラス 是昨天去的北京,是今天回来的上海。 是.+的 貪欲(デフォルト) 「できるだけ長く」 マッチしようとする → 是昨天去的北京,是今天回来的 (最後の「的」まで伸びる!) 是.+?的 非貪欲(? を追加) 「できるだけ短く」 マッチしようとする → 是昨天去的 (最初の「的」で止まる) 是[^,。?!]+的 否定文字クラス(最確実) 「句読点が出たら 確実に止まる」 → 是昨天去的 (句読点で確実に止まる)
書き方性質使いどころ
.+貪欲:最長マッチ行全体を取りたいとき
.+?非貪欲:最短マッチ短い単位でマッチしたいとき
[^X]+指定文字以外:確実に止まる文をまたぎたくないとき(最も安全)

記号一覧まとめ

記号意味中国語での使用例
.任意の1文字结.婚 離合詞の間に1文字
*0回以上の繰り返し结.*婚 間に何文字でも
+1回以上の繰り返し因为.+所以 呼応形式
?0回または1回结.?婚 間に0〜1文字
{n,m}n〜m回是.{4,8}的 是…的構文
[]ブラケット内のどれか1文字[啊吧呢] 語気助詞
[^]ブラケット内以外の1文字[^,。?!] 句読点以外
^行頭^" セリフ行の抽出
$行末。$ 句点で終わる行
|AまたはB但是|可是|不过
()グループ・キャプチャ(很|非常)大
\1(検索)後方参照(.)\1 畳語AA型
$1(置換)後方参照$1\n グループ後に改行
+?非貪欲マッチ是.+?的
\n改行置換で改行を挿入
\tタブタブ区切り処理
🖊 練習3
A-1次の正規表現の意味を説明してください。
  1. 学.生
  2. [一二三四五六七八九十]{1,2}个
  3. ^不
  4. 吗。$
  5. (.)\1
  6. [^""]+
B-1次の条件にマッチする正規表現を書いてください。
  1. 「打」と「电话」の間に0〜3文字が入るパターン
  2. 行末が「吗?」か「呢?」か「吧?」で終わる行
  3. 「虽然」で始まり「但是」か「可是」を含む行
  4. 「不」が2回以上連続するパターン
  5. 「我」か「你」か「他」のあとに「们」が来てもこなくてもよい
C-1Pulsarで次の置換を実際に行ってみましょう。

テキスト:今天天气很好。我们出去玩吧!你觉得怎么样?
句読点の後に改行を入れて1文1行にしてください。

解答B 1. 打.{0,3}电话 2. [吗呢吧]?$ 3. ^虽然[^。!?]+(但是|可是) 4. 不{2,} 5. [我你他]们?
解答C 検索:([。!?]) 置換:$1\n
第4章
中国語検索の実践
📌
検索式設計の4ステップ
① 探したいものを日本語で言語化する
② パターンの「骨格」(固定部分と可変部分)を決める
③ 可変部分を記号で表す(何文字か・句読点をまたぐか)
④ 過剰マッチ・漏れをチェックして修正する

4.1 離合詞を探す

「结婚」「睡觉」「生气」のように、分離して使われることがある動詞を離合詞といいます。

検索式意味マッチ例非マッチ例
结婚間に何も入らない结婚结了婚
结.婚ちょうど1文字结了婚、结过婚结婚、结了两次婚
结.?婚0〜1文字结婚、结了婚结了两次婚
结.{1,3}婚1〜3文字结了婚、结不了婚结婚
结[^,。?!]*婚句読点をまたがない(最安全)同上(句点で確実に止まる)
🖊 練習4-1

次の離合詞について「間に1〜3文字が入るもの」の検索式を書いてください。

  1. 生气
  2. 睡觉
  3. 洗澡
  4. 帮忙
  5. 离婚
  6. 请客
  7. 毕业
解答 1.生.{1,3}气 2.睡.{1,3}觉 3.洗.{1,3}澡 4.帮.{1,3}忙 5.离.{1,3}婚 6.请.{1,3}客 7.毕.{1,3}业

4.2 呼応形式・不連続成分を探す

呼応形式検索式
因为…所以因为[^。!?]+所以
虽然…但是/可是/不过虽然[^。!?]+(但是|可是|不过|却)
越…越…越[^,。!?]+越
只要…就…只要[^,。!?]+就
只有…才…只有[^,。!?]+才
连…都/也…连[^,。!?]+(都|也)
不是…而是…不是[^,。!?]+而是
既然…就…既然[^。!?]+就
一…就…一[^,。!?]+就
又…又…又[^,。!?]+又

4.3 「是…的」構文を探す

是[^,。!?]{2,10}的[^,。!?]*[,。?!]
マッチ:是昨天去的北京。 我是在上海出生的
非マッチ:这是我的书。(所有の「的」)

4.4 重ね型・畳語を探す

重ね型検索式
AA型看看、好好、天天(.)\1
ABB型白胖胖、慢吞吞.(.)\ 1
ABAB型介绍介绍、高兴高兴(.{2})\1
AABB型热热闹闹、高高兴兴(.)\1(.)\2
A一A型看一看、写一写(.)一\1
A了A型看了看、想了想(.)了\1
A不A型是不是、来不来(.+)不\1
AB不AB型可以不可以、同意不同意(.{2})不\1
AA[了的地]型谢谢了、红红的、狠狠地(.)\1[了的地]
📌
品詞タグなしのコーパスでは「马马虎虎」「太太」など畳語でないものもヒットします。これはコーパスの限界で、手動での取捨選択が必要です(沈・氷野 2005)。

4.5 量詞・数量表現を探す

# 漢数字+量詞
[一二三四五六七八九十百千两]+[个只条张本块件套]

# 数字(漢字・算用字)+量詞(どちらも)
([一二三四五六七八九十百千两]+|[0-9]+)[个只条张本块件套]

# 時間表現
([一二三四五六七八九十]+|[0-9]+)(个)?(小时|分钟|秒)

4.6 語気助詞・文末表現を探す

目的検索式
語気助詞(文末)[啊吧呢嘛哦喽][,。?!]
疑問文(吗)吗[?。]$
セリフ行の抽出^[""].+[""]$
台湾的語気助詞[喔欸耶哩啦][!。?,]
感嘆文[啊哦哇][!]$
第5章
データの収集・管理・整形
⚠️
整形前に必ず自問:「この要素を削除すると何の情報が失われるか?」
タイムコード・ハッシュタグ・発話者情報は、研究目的によっては重要な情報です。安易に削除してはいけません。

5.1 どんなデータが使えるか

サイト・データ種別エンコード形式主な用途
晋江文学城(小説)GB18030HTML現代口語・セリフ・文体研究
Weibo・SNSUTF-8テキスト/API若者ことば・感情表現・SNS語
字幕ファイル(.srt)UTF-8/GBsrtドラマ・映画のセリフ
HSK語彙・例文UTF-8HTML/PDF教材研究・語彙調査
人民日報・ニュースUTF-8HTML書き言葉・ニュース文体
ctext.org(古典)UTF-8HTML古典中国語研究

5.2 晋江文学城(小説データ)

📄 晋江文学城 — HTMLの構造 GB18030 HTML
www.jjwxc.net — 道医 第8章
<!-- 本文はこのdivの中 -->
<div id="paragraph_comment_content">
  周锦渊待过最大的集体就是道观,<br>
  他都不知道是不是所有单位……<br>
</div>
<!-- ここより下はコメント欄・広告 -->
<div id="favoriteshow_3"> ... </div>

整形手順

  1. <script[\s\S]+?</script> → 空欄(scriptタグ削除)
  2. <style[\s\S]+?</style> → 空欄(styleタグ削除)
  3. 本文div(id="paragraph_comment_content")より前後を手動削除
  4. <[^>]+> → 空欄(HTMLタグ削除)
  5. &nbsp; → スペース(エンティティ処理)
  6.  + → 空欄(全角スペース削除)
  7. ^\n → 空欄(空行削除)
  8. ([。!?][""]?)$1\n(1文1行化)
💡
エンコードが GB18030 の場合、Pulsarの右下のエンコード表示をクリックして GB18030 を選び、File → Save with Encoding → UTF-8 で保存し直してから作業してください。

こんな研究ができる

離合詞の分離形の頻度 セリフの語気助詞分布 是…的構文の目的語位置 重ね型の使用傾向 ジャンル別語彙の違い

5.3 字幕ファイル(srt)の処理

📄 字幕ファイル(.srt)の構造 UTF-8
1                                    ← 字幕番号
00:00:01,000 --> 00:00:03,500        ← タイムコード(開始→終了)
[王老师] 大家好,我们开始上课。      ← 発話者ラベル+本文
                                     ← 空行(ブロック区切り)
2
00:00:05,200 --> 00:00:07,600
[学生甲] 老师好!
⚠️
タイムコードは単なるノイズではありません。 発話速度・間・重なりの情報を含んでいます。談話分析・会話分析が目的なら削除してはいけません。
情報語彙・文法研究談話・会話分析発話速度研究
タイムコード削除してよい保持する保持する
発話者情報削除してよい保持する不要
空行(区切り)削除してよい保持する保持する

語彙・文法研究用(タイムコード削除)

# 1. 行番号を削除
検索:^\d+$

# 2. タイムコードを削除
検索:^\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}$

# 3. 発話者ラベルを削除
検索:^\[[^\]]+\]\s*

# 4. 空行を削除
検索:^\n

# 5. 発話者をタブ区切りで残したい場合
検索:^\[([^\]]+)\]\s*(.+)$ 置換:$1\t$2
# → 「王老师\t大家好,我们开始上课。」形式でExcel集計可能

こんな研究ができる

大陸vs台湾ドラマの語気助詞比較 男女キャラクターの発話パターン 時代劇vs現代劇の語彙差 発話速度の分析

5.4 SNS・Weiboデータの処理

📱 Weibo投稿の構造 UTF-8
@小李子2024 今天天气真好!#北京生活#想出去逛逛[微笑]。
昨天去了故宫[心动],超级漂亮!@王芳 你也去了吗?
https://weibo.com/12345/abc #旅游#[doge]
转发 @旅游达人:北京的秋天是最美的季节。
@ユーザー名:返信・言及の宛先  #話題#:Weiboのハッシュタグ  [絵文字]:ブラケット形式の感情表現
⚠️
「ノイズ」かどうかは研究目的次第:
・語彙・文法研究 → @・URL・ハッシュタグは削除してよい
・感情分析 → [微笑][doge] 等の絵文字は感情の主要な手がかり(削除してはいけない)
・話題・コミュニティ研究 → ハッシュタグは重要な情報(削除してはいけない)

語彙・文法研究用の整形(推奨順序)

# 1. ハッシュタグを削除(Weibo形式 #話題名#)
検索:#[^#\s]+#

# 2. URLを削除
検索:https?://\S+

# 3. @ユーザー名を削除
検索:@[^\s,。!?]+

# 4. ブラケット絵文字を削除
検索:\[[^\]]+\]

# 5. リツイート行を削除
検索:^(转发|RT)\s*@[^\s::]+[::]?\s*

# 6. 空行を削除
検索:^\n

こんな研究ができる

若者ことばの語彙変化 台湾vs大陸SNSの語気助詞比較 感情表現の地域差 重ね型の使用頻度 ネットスラングの分布

5.5 フォルダ構成の設計

研究目的別フォルダ構成の例 A:小説・文学コーパス 📁 Chinese-Data/ ├── 📁 Beijing/ │ └── 📁 LAOSHE/ │ ├── sishi01.txt │ └── sishi02.txt └── 📁 Taiwan/ └── 📁 BAILUYUAN/ └── ... → 地域・作家・作品の3階層 → 「老舎だけ」で検索範囲を絞れる B:ドラマ字幕比較 📁 Drama-Data/ ├── 📁 Mainland/ │ ├── 📁 2010s/ │ │ └── drama_A_ep01.txt │ └── 📁 2020s/ └── 📁 Taiwan/ └── 📁 idol/ └── drama_B_ep01.txt → 制作地・年代の2階層 → 大陸vs台湾の比較が簡単
💡
ファイル名は半角英数字・アンダースコアのみ。スペース・括弧・日本語・中国語は使わない。日付は YYYYMMDD 形式。連番は 01 02(ゼロ埋め)にするとソートしやすい。

5.6 Pythonで自動化する

ファイルが数十〜数百になると手作業には限界があります。Pythonを使えば整形作業を一括自動化できます。

HTML本文の一括抽出(晋江の例)

import re, os, glob

def extract_jinjian(html):
    # scriptタグ・styleタグを削除
    html = re.sub(r'<script[\s\S]+?</script>', '', html)
    html = re.sub(r'<style[\s\S]+?</style>', '', html)
    # 本文divを抽出
    m = re.search(
        r'id="paragraph_comment_content"[^>]*>([\s\S]+?)</div>\s*<div[^>]+id="favoriteshow',
        html)
    if not m: return None
    text = m.group(1)
    text = re.sub(r'<[^>]+>', '', text)   # タグ削除
    text = text.replace('&nbsp;', ' ')       # エンティティ処理
    text = re.sub(r' +', '', text)           # 全角スペース削除
    text = re.sub(r'\n{2,}', '\n', text)      # 連続改行を整理
    return text.strip()

# フォルダ内のHTMLをまとめて処理
os.makedirs('text_files', exist_ok=True)
for path in glob.glob('html_files/*.html'):
    basename = os.path.splitext(os.path.basename(path))[0]
    with open(path, encoding='gb18030', errors='replace') as f:
        text = extract_jinjian(f.read())
    if text:
        with open(f'text_files/{basename}.txt', 'w', encoding='utf-8') as f:
            f.write(text)
        print(f'✓ {basename}.txt')

srtの一括整形

def clean_srt(srt, remove_speaker=True):
    text = re.sub(r'^\d+$', '', srt, flags=re.MULTILINE)
    text = re.sub(r'^\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}$',
                  '', text, flags=re.MULTILINE)
    if remove_speaker:
        text = re.sub(r'^\[[^\]]+\]\s*', '', text, flags=re.MULTILINE)
    return re.sub(r'\n{2,}', '\n', text).strip()

5.7 こんな研究ができる

データ研究テーマ例主な検索式
晋江小説(複数作品)作家別の重ね型使用傾向の比較(.)\1 (.)\1(.)\2
大陸vs台湾ドラマ字幕語気助詞の地域差[啊吧呢喔欸耶][,。?!]
中国語教材(複数)離合詞のカバレッジ調査结.{0,3}婚
Weibo投稿(年代別)若者ことばの変化追跡語彙リストとのマッチング
近代教科書+現代小説是…的構文の通時的変化是[^,。]{2,10}的
複数ドラマ字幕発話速度の作品間比較タイムコード+Python計算
第6章
Grep横断検索+実践演習

6.1 Grep検索の使い方

Pulsar — プロジェクト検索
Find in Project Ctrl+Shift+F
Search:
虽然[^。!?]+(但是|可是|不过)
Path:
Chinese-Data/
✓ 8 files, 42 matches found
Chinese-Data/LAOSHE/sishi01.txt
Line 45: 她虽然年纪不大,但是很能干。
Line 123: 虽然天很冷,不过大家都来了。
Chinese-Data/LAOSHE/sishi02.txt
Line 78: 虽然他很努力,可是成绩不好。
  1. File → Add Project Folder でデータフォルダを開く
  2. Ctrl+Shift+F(Mac: Cmd+Shift+F)でプロジェクト検索を開く
  3. .* ボタンで正規表現モードをオン
  4. 検索式を入力 → Enter
  5. 結果はファイル名・行番号・マッチした行で表示される
💡
結果をTSVに保存してExcelで分析したい場合は、Pythonの grep_folder 関数(第5章)を使うと便利です。

6.2 実践演習課題

📚 演習A 離合詞の研究
A-1大陸ドラマと台湾ドラマの字幕データで「结婚」の分離形(間に1〜4文字が入るもの)の頻度を比較してください。どちらが多様な分離形を使っていますか?
A-2複数の教材で「睡觉」「洗澡」「生气」の分離形の出現数を調べ、教材がどのくらい離合詞の分離用法をカバーしているか分析してください。
A-3小説コーパスで「离婚」の分離形に挿入される成分(了・过・不・数量詞)の種類と頻度を集計してください。
📚 演習B 重ね型の研究
B-1複数の作家の小説データでAA型((.)\1)・AABB型((.)\1(.)\2)の頻度を比較し、作家による重ね型の使い方の違いを考察してください。
B-2SNS投稿と小説データでAA型の出現頻度を比較してください。どちらのジャンルに重ね型が多いですか?
B-3台湾ドラマと大陸ドラマでABB型(.(.)\ 1)にヒットした例を集め、語種(形容詞・副詞・擬音語)を分類してください。
📚 演習C 呼応形式の研究
C-1「虽然…但是」「虽然…可是」「虽然…不过」の3種類を別々に検索し、後項の選択傾向を比較してください。どれが最も多いですか?
C-2「只要…就」と「只有…才」をそれぞれ検索し、前後に来る表現の傾向を比較してください(条件の強さの違いが出ていますか?)。
C-3沈・氷野(2005)では5000万字コーパスで「虽然…但是」が422件でした。あなたのコーパスでの頻度と比較してみましょう。
📚 演習D 語気助詞の研究
D-1ドラマのセリフデータで「吧」「呢」「啊」の出現頻度を比較してください。場面(日常会話・対立場面・感情表現)によって分布は違いますか?
D-2台湾ドラマデータで「喔」「欸」「耶」「哩」「啦」を検索し、大陸ドラマデータと頻度を比較してください。
D-3同一ドラマで男性キャラクターと女性キャラクターの語気助詞の分布を比較してください(発話者タグが必要)。
📚 演習E 文体・ジャンル比較
E-1小説データと教材データで「是…的」構文の頻度を比較してください。どちらが多いですか?
E-2ニュース記事とSNS投稿で文末の表現パターン(。$ / [!?]$ / [啊吧呢]。$)の比率を比較してください。
E-3近代中国語教科書(1900年代)と現代教材で同じ離合詞の分離形使用頻度を比較し、通時的変化を考察してください。
📚 演習F 教材分析
F-1複数の中国語教材(異なる出版社・レベル)で、同じ離合詞リスト(结婚・睡觉・生气・洗澡・帮忙等)がどのくらいカバーされているか調査してください。
F-2教材に現れる「是…的」構文の例文を抽出し、強調されている成分(時間・場所・方式)の分布を集計してください。
F-3HSK語彙リストと小説コーパスを照合し、HSKに載っているのに実際の小説でほとんど使われていない語彙を探してください。
🌟 発展課題 自分のテーマで研究してみよう

以下のステップで自分のテーマを研究してください。

  1. 研究テーマを1文で書く(例:「台湾ドラマと大陸ドラマの〇〇を比較する」)
  2. 必要なデータを収集・整形する(第5章)
  3. 検索式を設計する(第4章の思考ステップを使う)
  4. Grep検索で用例を収集する
  5. 結果を表やグラフにまとめる
  6. 「なぜそうなっているか」を考察する
第7章
タグ付きコーパスを作る・使う

7.1 タグ付けとは何か

通常のテキストに品詞・文法情報などのタグ(ラベル)を付加したものをタグ付きコーパス(annotated corpus)といいます。タグ付きにすることで「名詞のあとに動詞が来るパターン」のような、品詞レベルの検索が可能になります。

形式特徴
XML形式<v>结</v><asp>了</asp><v>婚</v>視覚的・構造的だが正規表現で扱いにくい
TSV形式(本書推奨)结\tv\n了\tasp\n婚\tv正規表現・Python・Excelで扱いやすい

7.2 jiebaでTSV形式に自動タグ付け

jieba(结巴)は中国語の分かち書き・品詞付与ライブラリです。

# インストール
pip install jieba

import jieba.posseg as pseg

text = "周锦渊待过最大的集体就是道观,他连连喊冤。"

# 品詞付与してTSV形式で出力
with open('output.tsv', 'w', encoding='utf-8') as f:
    for word, pos in pseg.cut(text):
        f.write(f'{word}\t{pos}\n')

# 出力例:
# 周锦渊    nr   (人名)
# 待过      v    (動詞)
# 最大      a    (形容詞)
# 的        uj   (助詞)
# 集体      n    (名詞)

jiebaの主要品詞タグ

タグ品詞
n名詞集体、道观、医生
v動詞看、去、结婚
a形容詞大、好、漂亮
d副詞很、都、也
p前置詞在、从、对
r代詞他、我、这
m数詞一、两、三
q量詞个、次、本
nr人名周锦渊、王芳
ns地名北京、上海
⚠️
jiebaの精度は完璧ではありません。特に専門用語・人名・新語では誤りが出ます。研究目的で使う場合は必ずサンプルを目視確認し、必要に応じて手動修正してください。ユーザー辞書(jieba.load_userdict())を活用すると精度が上がります。

TSV形式での正規表現検索

# TSVファイルの例(1行1形態素)
周锦渊	nr
待过	v
最大	a
的	uj
集体	n
就是	d

# 「名詞のあとに動詞が来るパターン」を検索
# 検索式(Pulsarで):
^\S+\tn\n\S+\tv
# → 「名詞(n)の次の行が動詞(v)」にマッチ

# 「的」のあとに名詞が来るパターン
^的\tuj\n(\S+)\tn
# → 「的+名詞」の名詞を抽出できる

Pythonでの活用例

import re

# TSVファイルを読み込んで動詞リストを抽出
with open('output.tsv', encoding='utf-8') as f:
    lines = f.readlines()

verbs = [line.split('\t')[0] for line in lines
         if line.strip().endswith('\tv')]
print("動詞一覧:", verbs[:10])

# 動詞の頻度集計
from collections import Counter
verb_freq = Counter(verbs)
for word, count in verb_freq.most_common(10):
    print(f'{word}: {count}回')
参考文献
参考文献
  • 沈国威・氷野善寛(2005)「Windowsパソコンにおける中国語の検索——EmEditorを例に」関西大学東西学術研究所紀要
  • 沈国威(2000)『電脳による中国語研究のススメ』白帝社

ゼロから学ぶ正規表現による中国語テキスト検索・分析入門

氷野研究室 企画・お問い合わせ