最後更新:2026年9月26日

CHI 3242 課程大綱

第4週 什麼是「角色」?(Woloch)

1. Woloch:人物空間與人物系統

Alex Woloch 在《獨與眾》(The One vs. the Many)裡,把「角色重要/不重要」這種模糊的直覺判斷,重新表述為一個關於敘事資源分配的結構問題。他用兩個新的概念來說明這一點:

「我的闡釋方法首先建立在我將要提出並不斷回顧的兩個新的敘事學範疇的結合之上:人物空間(即個體人格與敘事整體中特定空間和位置之間獨特而充滿張力的相遇)和人物系統(將多個不同的人物空間,即對人物形象的不同配置和處理,安排成一個統一的敘事結構)。」

"My interpretive method rests above all in the combination of two new narratological categories which I will formulate and continually return to: the character-space (that particular and charged encounter between an individual human personality and a determined space and position within the narrative as a whole) and the character-system (the arrangement of multiple and differentiated character-spaces, differentiated configurations and manipulations of the human figure, into a unified narrative structure)."

人物空間(character-space):一個角色在敘事作品中所佔據的具體、有限的位置。它不是角色「本身」的心理深度,而是「被暗示的人」(an implied person,一個假設具有完整生命與內在世界的人)與敘事話語實際分配給這個人的篇幅、視角、關注度,這兩者交會之後的產物。同一個「被暗示的人」,若被分配到大量、連續、深入的篇幅,就有寬闊的人物空間(如主角);若只在他人視角中偶爾閃現、被簡化為一個功能或類型,人物空間就十分狹小(如許多次要人物)。

人物系統(character-system):小說中所有人物並非各自獨立存在,而是共同組成一個分佈不均的系統,彼此競爭同一份有限的敘事資源(篇幅、視角、情節功能)。主角的空間之所以龐大,正是以壓縮、切割其他人物的空間為代價;次要人物往往被功能化,化為主角故事線上的一個工具、一個背景、一種類型。Woloch特別指出:次要人物常常「暗示」比文本實際給予的空間更豐富的內在生命,這種「被暗示的深度」與「被分配的有限空間」之間的落差,正是人物系統的結構性張力所在,也是小說形式的核心動力之一。

換言之,Woloch把「這個角色有多重要」的印象式判斷,重新表述為一個關於敘事資源分配的結構問題:誰得到篇幅?誰的視角被採用?誰的內在生命被展開,誰的則被壓縮成幾句話、一個標籤?

2. 能否用統計方法操作化「人物空間」?

人物空間本質上談的是「文本給了這個角色多少注意力、透過這個角色運作了多少敘事資源」。詞頻本身只能告訴我們一個名字出現多少次,卻無法告訴我們:這個角色被什麼樣的詞語包圍,動作、情感、身體描寫、社會關係、地點……而這些詞語的分佈,正是敘事話語透過這個角色所展開的內容。

這就是搭配詞(collocation)可以介入的地方:計算哪些詞比隨機預期更常出現在一個角色姓名周圍,等於在描繪這個角色的「語言環境」(verbal environment)。某種意義上,這正是人物空間在文本表層留下的痕跡。這不等於Woloch原本的理論(他談的是敘事結構與篇幅分配,而搭配詞談的是詞語共現),但可以作為一種操作化的起點,讓我們用統計方法去追問:這個角色的「空間」裡,究竟被填進了什麼?

3. 課堂練習:用搭配詞觀察一個角色的「空間」

步驟一:準備語料

選一部較長的小說,取得其 .txt 檔案(例如 qhchina-data/corpora)。

步驟二:建立倉庫

兩種做法皆可:

  1. 用 Codespace:在 GitHub 上建立一個新的空倉庫,進入倉庫後按 Code → Codespaces → Create codespace,再把小說 .txt 檔放進去(例如存成 data/novel.txt)。
  2. 用自己的電腦:先到 GitHub 建立一個全新的空倉庫,然後把它 clone 到電腦上,用 VS Code 打開,把小說 .txt 檔放進去(例如 data/novel.txt),在裡面完成後面的分析工作,完成後 commit 並 push。

步驟三:交給編程助手

把下列提示依序複製貼進 OpenCode,記得依你的檔名與角色姓名調整內容。完整參數說明見 find_collocates() 文件與 load_stopwords() 文件。

提示 1 分句與分詞

data/novel.txt is this novel's .txt file (UTF-8).
Please install jieba, qhchina, and opencc.

Write a Python script (segment.py) that:
- loads data/novel.txt
- converts the whole text to simplified Chinese characters with opencc (jieba works better with simplified characters)
- splits the text into sentences using Chinese sentence-ending punctuation (。!?)
- tokenizes each sentence into words with jieba, removing punctuation marks
- keeps only sentences with at least 5 words
- saves the result as sentences.txt, one sentence per line, with the words in each sentence separated by a single space, so I can reuse it without re-segmenting every time

轉換後,記得下一步的目標角色姓名也要用簡體字(例如原文是「賈寶玉」,之後 target_words 要寫「贾宝玉」,否則會完全找不到搭配詞)。

提示 2 搭配詞分析

Using sentences.txt from before, write a Python script (collocates.py) that finds collocates for the target word "TARGET WORD" with find_collocates from qhchina.analytics.collocations. Remove stopwords with load_stopwords() from qhchina, keep only collocates with at least 2 characters, and only keep the ones with a p-value below 0.05.

Run it three times: once with method="window" and horizon=5, once with method="window" and horizon=10, and once with method="sentence". Sort each result by obs_local from high to low, save each one to its own CSV in output/ (name the files so I can tell which run is which), and print the top 20 rows of each to the terminal.

提示 3 整理成一個 HTML 頁面

Write a Python script (make_report.py) that reads the three CSV files I just saved in output/ and builds a single page, output/results.html, with a dropdown that lets me switch between the three tables, so I can compare them without opening each CSV separately.

步驟四:觀察與詮釋

打開 output/results.html,比較各次跑法的搭配詞表:

完成後,請把 segment.py、collocates.py、make_report.py、sentences.txt 與 output/ 資料夾 commit 並 push 到 GitHub:直接請編程助手幫你 commit 並 push 即可;若在自己的電腦上工作,記得先告訴它你的倉庫網址。

閱讀