Analyze Japanese Text Data

This example shows how to import, prepare, and analyze Japanese text data using a topic model.

Japanese text data can be large and can contain lots of noise that negatively affects statistical analysis. For example, the text data can contain the following:

  • Variations in word forms. For example, "難しい" ("is difficult") and "難しかった" ("was difficult")

  • Words that add noise. For example, stop words such as "あそこ" ("over there"), "あたり" ("around"), and "あちら" ("there")

  • Punctuation and special characters

These word clouds illustrate word frequency analysis applied to some raw text data from "吾輩は猫である" by 夏目漱石, and a preprocessed version of the same text data.

This example first shows how to import and prepare Japanese text data, and then it shows how to analyze the text data using a Latent Dirichlet Allocation (LDA) model. An LDA model is a topic model that discovers underlying topics in a collection of documents and infers the word probabilities in topics. Use these steps in preparing the text data and fitting the model:

  • Read HTML code from a website.

  • Parse the HTML code and extract the relevant data.

  • Prepare the text data for analysis using standard preprocessing techniques.

  • Fit a topic model and visualize the results.

Import Data

Read the data from "吾輩は猫である" by 夏目漱石 from https://www.aozora.gr.jp/cards/000148/files/789_14547.html using the webread function.

Specify the character encoding of the text using the weboptions function. To find the correct character encoding for an HTML, look in the header of the HTML code. For this file, specify the character encoding to be "Shift_JIS".

url = "https://www.aozora.gr.jp/cards/000148/files/789_14547.html";
options = weboptions('CharacterEncoding','Shift_JIS');
code = webread(url,options);

View the first few lines of the HTML code.

extractBefore(code,"<script")
ans = 
    '<?xml version="1.0" encoding="Shift_JIS"?>
     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
         "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
     <html xml:lang="ja" >
     <head>
     	<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS" />
     	<meta http-equiv="content-style-type" content="text/css" />
     	<link rel="stylesheet" type="text/css" href="../../aozora.css" />
     	<title>夏目漱石 吾輩は猫である</title>
     	'

Extract the text data from the HTML using extractHTMLText. Split the text by newline characters.

textData = extractHTMLText(code);
textData = string(split(textData,newline));
textData(1:10)
ans = 10×1 string array
    "吾輩は猫である"
    ""
    "夏目漱石"
    ""
    " "
    ""
    "一"
    ""
    " 吾輩は猫である。名前はまだ無い。"
    " どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。この書生というのは時々我々を捕えて煮て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始であろう。この時妙なものだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶だ。その後猫にもだいぶ逢ったがこんな片輪には一度も出会わした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙を吹く。どうも咽せぽくて実に弱った。これが人間の飲む煙草というものである事はようやくこの頃知った。"

Remove the empty lines of text.

idx = textData == "";
textData(idx) = [];
textData(1:10)
ans = 10×1 string array
    "吾輩は猫である"
    "夏目漱石"
    " "
    "一"
    " 吾輩は猫である。名前はまだ無い。"
    " どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。この書生というのは時々我々を捕えて煮て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始であろう。この時妙なものだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶だ。その後猫にもだいぶ逢ったがこんな片輪には一度も出会わした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙を吹く。どうも咽せぽくて実に弱った。これが人間の飲む煙草というものである事はようやくこの頃知った。"
    " この書生の掌の裏でしばらくはよい心持に坐っておったが、しばらくすると非常な速力で運転し始めた。書生が動くのか自分だけが動くのか分らないが無暗に眼が廻る。胸が悪くなる。到底助からないと思っていると、どさりと音がして眼から火が出た。それまでは記憶しているがあとは何の事やらいくら考え出そうとしても分らない。"
    " ふと気が付いて見ると書生はいない。たくさんおった兄弟が一疋も見えぬ。肝心の母親さえ姿を隠してしまった。その上今までの所とは違って無暗に明るい。眼を明いていられぬくらいだ。はてな何でも容子がおかしいと、のそのそ這い出して見ると非常に痛い。吾輩は藁の上から急に笹原の中へ棄てられたのである。"
    " ようやくの思いで笹原を這い出すと向うに大きな池がある。吾輩は池の前に坐ってどうしたらよかろうと考えて見た。別にこれという分別も出ない。しばらくして泣いたら書生がまた迎に来てくれるかと考え付いた。ニャー、ニャーと試みにやって見たが誰も来ない。そのうち池の上をさらさらと風が渡って日が暮れかかる。腹が非常に減って来た。泣きたくても声が出ない。仕方がない、何でもよいから食物のある所まであるこうと決心をしてそろりそろりと池を左りに廻り始めた。どうも非常に苦しい。そこを我慢して無理やりに這って行くとようやくの事で何となく人間臭い所へ出た。ここへ這入ったら、どうにかなると思って竹垣の崩れた穴から、とある邸内にもぐり込んだ。縁は不思議なもので、もしこの竹垣が破れていなかったなら、吾輩はついに路傍に餓死したかも知れんのである。一樹の蔭とはよく云ったものだ。この垣根の穴は今日に至るまで吾輩が隣家の三毛を訪問する時の通路になっている。さて邸へは忍び込んだもののこれから先どうして善いか分らない。そのうちに暗くなる、腹は減る、寒さは寒し、雨が降って来るという始末でもう一刻の猶予が出来なくなった。仕方がないからとにかく明るくて暖かそうな方へ方へとあるいて行く。今から考えるとその時はすでに家の内に這入っておったのだ。ここで吾輩は彼の書生以外の人間を再び見るべき機会に遭遇したのである。第一に逢ったのがおさんである。これは前の書生より一層乱暴な方で吾輩を見るや否やいきなり頸筋をつかんで表へ抛り出した。いやこれは駄目だと思ったから眼をねぶって運を天に任せていた。しかしひもじいのと寒いのにはどうしても我慢が出来ん。吾輩は再びおさんの隙を見て台所へ這い上った。すると間もなくまた投げ出された。吾輩は投げ出されては這い上り、這い上っては投げ出され、何でも同じ事を四五遍繰り返したのを記憶している。その時におさんと云う者はつくづくいやになった。この間おさんの三馬を偸んでこの返報をしてやってから、やっと胸の痞が下りた。吾輩が最後につまみ出されようとしたときに、この家の主人が騒々しい何だといいながら出て来た。下女は吾輩をぶら下げて主人の方へ向けてこの宿なしの小猫がいくら出しても出しても御台所へ上って来て困りますという。主人は鼻の下の黒い毛を撚りながら吾輩の顔をしばらく眺めておったが、やがてそんなら内へ置いてやれといったまま奥へ這入ってしまった。主人はあまり口を聞かぬ人と見えた。下女は口惜しそうに吾輩を台所へ抛り出した。かくして吾輩はついにこの家を自分の住家と極める事にしたのである。"
    " 吾輩の主人は滅多に吾輩と顔を合せる事がない。職業は教師だそうだ。学校から帰ると終日書斎に這入ったぎりほとんど出て来る事がない。家のものは大変な勉強家だと思っている。当人も勉強家であるかのごとく見せている。しかし実際はうちのものがいうような勤勉家ではない。吾輩は時々忍び足に彼の書斎を覗いて見るが、彼はよく昼寝をしている事がある。時々読みかけてある本の上に涎をたらしている。彼は胃弱で皮膚の色が淡黄色を帯びて弾力のない不活溌な徴候をあらわしている。その癖に大飯を食う。大飯を食った後でタカジヤスターゼを飲む。飲んだ後で書物をひろげる。二三ページ読むと眠くなる。涎を本の上へ垂らす。これが彼の毎夜繰り返す日課である。吾輩は猫ながら時々考える事がある。教師というものは実に楽なものだ。人間と生れたら教師となるに限る。こんなに寝ていて勤まるものなら猫にでも出来ぬ事はないと。それでも主人に云わせると教師ほどつらいものはないそうで彼は友達が来る度に何とかかんとか不平を鳴らしている。"

Visualize the text data in a word cloud.

figure
wordcloud(textData);

Tokenize Documents

Tokenize the text using tokenizedDocument and view the first few documents.

documents = tokenizedDocument(textData);
documents(1:10)
ans = 
  10×1 tokenizedDocument:

      5 tokens: 吾輩 は 猫 で ある
      2 tokens: 夏目 漱石
      0 tokens:
      1 tokens: 一
     11 tokens: 吾輩 は 猫 で ある 。 名前 は まだ 無い 。
    264 tokens: どこ で 生れ た か とんと 見当 が つか ぬ 。 何 でも 薄暗い じめじめ し た 所 で ニャーニャー 泣い て いた事 だけ は 記憶 し て いる 。 吾輩 は ここ で 始め て 人間 という もの を 見 た 。 しかも あと で 聞く と それ は 書生 という 人間 中 で 一番 獰悪 な 種族 で あっ た そう だ 。 この 書生 という の は 時々 我々 を 捕え て 煮 て 食う という 話 で ある 。 しかし その 当時 は 何 という 考 も なかっ た から 別段 恐し いとも 思わ なかっ た 。 ただ 彼 の 掌 に 載せ られ て スー と 持ち上げ られ た 時 何だか フワフワ し た 感じ が あっ た ばかり で ある 。 掌 の 上 で 少し 落ちつい て 書生 の 顔 を 見 た の が いわゆる 人間 という もの の 見 始 で あろ う 。 この 時 妙 な もの だ と 思っ た 感じ が 今 でも 残っ て いる 。 第 一 毛 をもって 装飾 さ れ べき はず の 顔 が つるつる し て まるで 薬缶 だ 。 その後 猫 に も だいぶ 逢っ た が こんな 片 輪 に は 一 度 も 出会わ し た 事 が ない 。 のみ なら ず 顔 の 真中 が あまりに 突起 し て いる 。 そうして その 穴 の 中 から 時々 ぷうぷうと 煙 を 吹く 。 どうも 咽 せ ぽく て 実に 弱っ た 。 これ が 人間 の 飲む 煙草 という もの で ある 事 は ようやく この 頃 知っ た 。
    100 tokens: この 書生 の 掌 の 裏 で しばらく は よい 心持 に 坐っ て おっ た が 、 しばらく する と 非常 な 速力 で 運転 し 始め た 。 書生 が 動く の か 自分 だけ が 動く の か 分ら ない が 無 暗に 眼 が 廻る 。 胸 が 悪く なる 。 到底 助から ない と 思っ て いる と 、 ど さり と 音 が し て 眼 から 火 が 出 た 。 それ まで は 記憶 し て いる が あと は 何 の 事 やら いくら 考え出そ う として も 分ら ない 。
     92 tokens: ふと 気 が 付い て 見る と 書生 は い ない 。 たくさん おっ た 兄弟 が 一疋 も 見え ぬ 。 肝心 の 母親 さえ 姿 を 隠し て しまっ た 。 その 上今 まで の 所 と は 違っ て 無 暗に 明るい 。 眼 を 明い て い られ ぬ くらい だ 。 はてな 何 でも 容子 が おかしい と 、 のそのそ 這い出し て 見る と 非常 に 痛い 。 吾輩 は 藁 の 上 から 急 に 笹原 の 中 へ 棄て られ た の で ある 。
    693 tokens: ようやく の 思い で 笹原 を 這い出す と 向う に 大きな 池 が ある 。 吾輩 は 池 の 前 に 坐っ て どう し たら よかろ う と 考え て 見 た 。 別に これ という 分別 も 出 ない 。 しばらく し て 泣い たら 書生 が また 迎 に 来 て くれる か と 考え付い た 。 ニャー 、 ニャー と 試み に やっ て 見 た が 誰 も 来 ない 。 そのうち 池 の 上 を さらさら と 風 が 渡っ て 日 が 暮れ かかる 。 腹 が 非常 に 減っ て 来 た 。 泣き たく て も 声 が 出 ない 。 仕方 が ない 、 何 で も よい から 食物 の ある 所 まで ある こう と 決心 を し て そろ り そろりと 池 を 左 り に 廻り 始め た 。 どうも 非常 に 苦しい 。 そこ を 我慢 し て 無理やり に 這っ て 行く と ようやく の 事 で 何となく 人間 臭い 所 へ 出 た 。 ここ へ 這入っ たら 、 どうにか なる と 思っ て 竹垣 の 崩れ た 穴 から 、 とある 邸 内 に もぐり込ん だ 。 縁 は 不思議 な もの で 、 もし この 竹垣 が 破れ て い なかっ た なら 、 吾輩 は ついに 路傍 に 餓死 し た かも 知れ ん の で ある 。 一樹 の 蔭 と は よく 云っ た もの だ 。 この 垣根 の 穴 は 今日 に 至る まで 吾輩 が 隣家 の 三 毛 を 訪問 する 時 の 通路 に なっ て いる 。 さて 邸 へ は 忍び込ん だ ものの これから 先 どうして 善い か 分ら ない 。 その うち に 暗く なる 、 腹 は 減る 、 寒 さ は 寒し 、 雨 が 降っ て 来る という 始末 で もう 一刻 の 猶予 が 出来 なく なっ た 。 仕方 が ない から とにかく 明るく て 暖か そう な 方 へ 方 へ と あるい て 行く 。 今 から 考える と その 時 は すでに 家 の 内 に 這入っ て おっ た の だ 。 ここ で 吾輩 は 彼 の 書生 以外 の 人間 を 再び 見る べき 機会 に 遭遇 し た の で ある 。 第 一 に 逢っ た の が お さん で ある 。 こ…
    276 tokens: 吾輩 の 主人 は 滅多 に 吾輩 と 顔 を 合せる 事 が ない 。 職業 は 教師 だ そう だ 。 学校 から 帰る と 終日 書斎 に 這入っ た ぎりほとんど 出 て 来る 事 が ない 。 家 の もの は 大変 な 勉強 家 だ と 思っ て いる 。 当人 も 勉強 家 で ある か の ごとく 見せ て いる 。 しかし 実際 は うち の もの が いう よう な 勤勉 家 で は ない 。 吾輩 は 時々 忍び足 に 彼 の 書斎 を 覗い て 見る が 、 彼 は よく 昼寝 を し て いる 事 が ある 。 時々 読みかけ て ある 本 の 上 に 涎 を たらし て いる 。 彼 は 胃弱 で 皮膚 の 色 が 淡 黄色 を 帯び て 弾力 の ない 不 活溌 な 徴候 を あらわし て いる 。 その 癖 に 大飯 を 食う 。 大飯 を 食っ た 後 で タカジヤスターゼ を 飲む 。 飲ん だ 後 で 書物 を ひろげる 。 二 三 ページ 読む と 眠く なる 。 涎 を 本 の 上 へ 垂らす 。 これ が 彼 の 毎夜 繰り返す 日課 で ある 。 吾輩 は 猫 ながら 時々 考える 事 が ある 。 教師 という もの は 実に 楽 な もの だ 。 人間 と 生れ たら 教師 と なる に 限る 。 こんなに 寝 て い て 勤まる もの なら 猫 に でも 出来 ぬ 事 は ない と 。 それでも 主人 に 云わ せる と 教師 ほど つらい もの は ない そう で 彼 は 友達 が 来る 度 に 何とか かん とか 不平 を 鳴らし て いる 。

Get Part-of-Speech Tags

Get the token details and then view the details of the first few tokens.

tdetails = tokenDetails(documents);
head(tdetails)
ans=8×8 table
    Token     DocumentNumber    LineNumber     Type      Language     PartOfSpeech     Lemma       Entity  
    ______    ______________    __________    _______    ________    ______________    ______    __________

    "吾輩"          1               1         letters       ja       pronoun           "吾輩"     non-entity
    "は"            1               1         letters       ja       adposition        "は"      non-entity
    "猫"            1               1         letters       ja       noun              "猫"      non-entity
    "で"            1               1         letters       ja       auxiliary-verb    "だ"      non-entity
    "ある"          1               1         letters       ja       auxiliary-verb    "ある"     non-entity
    "夏目"          2               1         letters       ja       proper-noun       "夏目"     person    
    "漱石"          2               1         letters       ja       proper-noun       "漱石"     person    
    "一"            4               1         letters       ja       numeral           "一"      non-entity

The PartOfSpeech variable in the table contains the part-of-speech tags of the tokens. Create word clouds of all the nouns and adjectives, respectively.

figure
idx = tdetails.PartOfSpeech == "noun";
tokens = tdetails.Token(idx);
subplot(1,2,1)
wordcloud(tokens);
title("Nouns")

idx = tdetails.PartOfSpeech == "adjective";
tokens = tdetails.Token(idx);
subplot(1,2,2)
wordcloud(tokens);
title("Adjectives")

Prepare Text Data for Analysis

Remove the stop words.

documents = removeStopWords(documents);
documents(1:10)
ans = 
  10×1 tokenizedDocument:

      2 tokens: 吾輩 猫
      2 tokens: 夏目 漱石
      0 tokens:
      0 tokens:
      6 tokens: 吾輩 猫 。 まだ 無い 。
    117 tokens: 生れ とんと 見当 つか ぬ 。 薄暗い じめじめ ニャーニャー 泣い いた事 記憶 。 吾輩 始め 人間 という 。 しかも 聞く 書生 という 人間 一番 獰悪 種族 あっ 。 書生 という 時々 捕え 煮 食う という 。 しかし 当時 という 考 なかっ 別段 恐し いとも 思わ なかっ 。 掌 載せ られ スー 持ち上げ られ 何だか フワフワ あっ 。 掌 少し 落ちつい 書生 顔 いわゆる 人間 という 始 あろ 。 妙 思っ 残っ 。 毛 をもって 装飾 れ べき 顔 つるつる まるで 薬缶 。 猫 だいぶ 逢っ こんな 片 出会わ 。 のみ なら 顔 真中 あまりに 突起 。 そうして 穴 時々 ぷうぷうと 煙 吹く 。 どうも 咽 せ ぽく 実に 弱っ 。 人間 飲む 煙草 という ようやく 知っ 。
     43 tokens: 書生 掌 裏 しばらく よい 心持 坐っ おっ 、 しばらく 非常 速力 運転 始め 。 書生 動く 動く 分ら 無 暗に 眼 廻る 。 胸 悪く 。 到底 助から 思っ 、 ど さり 音 眼 出 。 記憶 いくら 考え出そ として 分ら 。
     46 tokens: ふと 付い 見る 書生 。 おっ 兄弟 一疋 見え ぬ 。 肝心 母親 姿 隠し しまっ 。 上今 違っ 無 暗に 明るい 。 眼 明い られ ぬ くらい 。 はてな 容子 おかしい 、 のそのそ 這い出し 見る 非常 痛い 。 吾輩 藁 急 笹原 棄て られ 。
    323 tokens: ようやく 思い 笹原 這い出す 向う 大きな 池 。 吾輩 池 坐っ たら よかろ 考え 。 別に という 分別 出 。 しばらく 泣い たら 書生 迎 来 くれる 考え付い 。 ニャー 、 ニャー 試み やっ 来 。 そのうち 池 さらさら 風 渡っ 暮れ かかる 。 腹 非常 減っ 来 。 泣き たく 声 出 。 仕方 、 よい 食物 こう 決心 そろ り そろりと 池 り 廻り 始め 。 どうも 非常 苦しい 。 我慢 無理やり 這っ 行く ようやく 何となく 人間 臭い 出 。 這入っ たら 、 どうにか 思っ 竹垣 崩れ 穴 、 とある 邸 もぐり込ん 。 縁 不思議 、 もし 竹垣 破れ なかっ なら 、 吾輩 ついに 路傍 餓死 かも 知れ 。 一樹 蔭 よく 云っ 。 垣根 穴 今日 至る 吾輩 隣家 毛 訪問 通路 なっ 。 さて 邸 忍び込ん ものの これから どうして 善い 分ら 。 暗く 、 腹 減る 、 寒 寒し 、 雨 降っ 来る という 始末 もう 一刻 猶予 出来 なく なっ 。 仕方 とにかく 明るく 暖か あるい 行く 。 考える すでに 這入っ おっ 。 吾輩 書生 以外 人間 再び 見る べき 機会 遭遇 。 逢っ 。 書生 一層 乱暴 吾輩 見る 否や いきなり 頸筋 つかん 表 抛り出し 。 駄目 思っ 眼 ねぶっ 運 天 任せ 。 しかし ひもじい 寒い どうしても 我慢 出来 。 吾輩 再び おさん 隙 台所 這い 上っ 。 すると 間もなく 投げ出さ れ 。 吾輩 投げ出さ れ 這い 上り 、 這い 上っ 投げ出さ れ 、 遍 繰り返し 記憶 。 おさん 云う つくづく なっ 。 この間 おさん 馬 偸 んで 返報 やっ 、 やっと 胸 痞 下り 。 吾輩 最後 つまみ出さ れよ 、 主人 騒々しい いい ながら 出 来 。 下女 吾輩 ぶら下げ 主人 向け 宿 なし 小 猫 いくら 出し 出し 御台 上っ 来 困り いう 。 主人 鼻 黒い 毛 撚り ながら 吾輩 顔 しばらく 眺め おっ 、 やがて そん なら 置い やれ といった 奥 這入っ しまっ 。 主人 あまり 聞か ぬ 見え 。 下女 口惜し 吾輩 台所 抛り出し 。 かくして 吾輩 ついに 住 極める 。
    122 tokens: 吾輩 主人 滅多 吾輩 顔 合せる 。 職業 教師 。 学校 帰る 終日 書斎 這入っ ぎりほとんど 出 来る 。 大変 勉強 思っ 。 当人 勉強 ごとく 見せ 。 しかし 実際 いう 勤勉 。 吾輩 時々 忍び足 書斎 覗い 見る 、 よく 昼寝 。 時々 読みかけ 本 涎 たらし 。 胃弱 皮膚 色 淡 黄色 帯び 弾力 不 活溌 徴候 あらわし 。 癖 大飯 食う 。 大飯 食っ タカジヤスターゼ 飲む 。 飲ん 書物 ひろげる 。 ページ 読む 眠く 。 涎 本 垂らす 。 毎夜 繰り返す 日課 。 吾輩 猫 ながら 時々 考える 。 教師 という 実に 。 人間 生れ たら 教師 限る 。 こんなに 寝 勤まる なら 猫 出来 ぬ 。 それでも 主人 云わ 教師 つらい 友達 来る 何とか かん 不平 鳴らし 。

Erase the punctuation.

documents = erasePunctuation(documents);
documents(1:10)
ans = 
  10×1 tokenizedDocument:

      2 tokens: 吾輩 猫
      2 tokens: 夏目 漱石
      0 tokens:
      0 tokens:
      4 tokens: 吾輩 猫 まだ 無い
    102 tokens: 生れ とんと 見当 つか ぬ 薄暗い じめじめ ニャーニャー 泣い いた事 記憶 吾輩 始め 人間 という しかも 聞く 書生 という 人間 一番 獰悪 種族 あっ 書生 という 時々 捕え 煮 食う という しかし 当時 という 考 なかっ 別段 恐し いとも 思わ なかっ 掌 載せ られ スー 持ち上げ られ 何だか フワフワ あっ 掌 少し 落ちつい 書生 顔 いわゆる 人間 という 始 あろ 妙 思っ 残っ 毛 をもって 装飾 れ べき 顔 つるつる まるで 薬缶 猫 だいぶ 逢っ こんな 片 出会わ のみ なら 顔 真中 あまりに 突起 そうして 穴 時々 ぷうぷうと 煙 吹く どうも 咽 せ ぽく 実に 弱っ 人間 飲む 煙草 という ようやく 知っ
     36 tokens: 書生 掌 裏 しばらく よい 心持 坐っ おっ しばらく 非常 速力 運転 始め 書生 動く 動く 分ら 無 暗に 眼 廻る 胸 悪く 到底 助から 思っ ど さり 音 眼 出 記憶 いくら 考え出そ として 分ら
     38 tokens: ふと 付い 見る 書生 おっ 兄弟 一疋 見え ぬ 肝心 母親 姿 隠し しまっ 上今 違っ 無 暗に 明るい 眼 明い られ ぬ くらい はてな 容子 おかしい のそのそ 這い出し 見る 非常 痛い 吾輩 藁 急 笹原 棄て られ
    274 tokens: ようやく 思い 笹原 這い出す 向う 大きな 池 吾輩 池 坐っ たら よかろ 考え 別に という 分別 出 しばらく 泣い たら 書生 迎 来 くれる 考え付い ニャー ニャー 試み やっ 来 そのうち 池 さらさら 風 渡っ 暮れ かかる 腹 非常 減っ 来 泣き たく 声 出 仕方 よい 食物 こう 決心 そろ り そろりと 池 り 廻り 始め どうも 非常 苦しい 我慢 無理やり 這っ 行く ようやく 何となく 人間 臭い 出 這入っ たら どうにか 思っ 竹垣 崩れ 穴 とある 邸 もぐり込ん 縁 不思議 もし 竹垣 破れ なかっ なら 吾輩 ついに 路傍 餓死 かも 知れ 一樹 蔭 よく 云っ 垣根 穴 今日 至る 吾輩 隣家 毛 訪問 通路 なっ さて 邸 忍び込ん ものの これから どうして 善い 分ら 暗く 腹 減る 寒 寒し 雨 降っ 来る という 始末 もう 一刻 猶予 出来 なく なっ 仕方 とにかく 明るく 暖か あるい 行く 考える すでに 這入っ おっ 吾輩 書生 以外 人間 再び 見る べき 機会 遭遇 逢っ 書生 一層 乱暴 吾輩 見る 否や いきなり 頸筋 つかん 表 抛り出し 駄目 思っ 眼 ねぶっ 運 天 任せ しかし ひもじい 寒い どうしても 我慢 出来 吾輩 再び おさん 隙 台所 這い 上っ すると 間もなく 投げ出さ れ 吾輩 投げ出さ れ 這い 上り 這い 上っ 投げ出さ れ 遍 繰り返し 記憶 おさん 云う つくづく なっ この間 おさん 馬 偸 んで 返報 やっ やっと 胸 痞 下り 吾輩 最後 つまみ出さ れよ 主人 騒々しい いい ながら 出 来 下女 吾輩 ぶら下げ 主人 向け 宿 なし 小 猫 いくら 出し 出し 御台 上っ 来 困り いう 主人 鼻 黒い 毛 撚り ながら 吾輩 顔 しばらく 眺め おっ やがて そん なら 置い やれ といった 奥 這入っ しまっ 主人 あまり 聞か ぬ 見え 下女 口惜し 吾輩 台所 抛り出し かくして 吾輩 ついに 住 極める
    101 tokens: 吾輩 主人 滅多 吾輩 顔 合せる 職業 教師 学校 帰る 終日 書斎 這入っ ぎりほとんど 出 来る 大変 勉強 思っ 当人 勉強 ごとく 見せ しかし 実際 いう 勤勉 吾輩 時々 忍び足 書斎 覗い 見る よく 昼寝 時々 読みかけ 本 涎 たらし 胃弱 皮膚 色 淡 黄色 帯び 弾力 不 活溌 徴候 あらわし 癖 大飯 食う 大飯 食っ タカジヤスターゼ 飲む 飲ん 書物 ひろげる ページ 読む 眠く 涎 本 垂らす 毎夜 繰り返す 日課 吾輩 猫 ながら 時々 考える 教師 という 実に 人間 生れ たら 教師 限る こんなに 寝 勤まる なら 猫 出来 ぬ それでも 主人 云わ 教師 つらい 友達 来る 何とか かん 不平 鳴らし

Lemmatize the text using normalizeWords.

documents = normalizeWords(documents);
documents(1:10)
ans = 
  10×1 tokenizedDocument:

      2 tokens: 吾輩 猫
      2 tokens: 夏目 漱石
      0 tokens:
      0 tokens:
      4 tokens: 吾輩 猫 まだ 無い
    102 tokens: 生れる とんと 見当 つく ぬ 薄暗い じめじめ ニャーニャー 泣く いた事 記憶 吾輩 始める 人間 という しかも 聞く 書生 という 人間 一番 獰悪 種族 ある 書生 という 時々 捕える 煮る 食う という しかし 当時 という 考 ない 別段 恐い いとも 思う ない 掌 載せる られる スー 持ち上げる られる 何だか フワフワ ある 掌 少し 落ちつく 書生 顔 いわゆる 人間 という 始 ある 妙 思う 残る 毛 をもって 装飾 れる べし 顔 つるつる まるで 薬缶 猫 だいぶ 逢う こんな 片 出会う のみ なる 顔 真中 あまりに 突起 そうして 穴 時々 ぷうぷうと 煙 吹く どうも 咽 する ぽい 実に 弱る 人間 飲む 煙草 という ようやく 知る
     36 tokens: 書生 掌 裏 しばらく よい 心持 坐る おる しばらく 非常 速力 運転 始める 書生 動く 動く 分る 無 暗に 眼 廻る 胸 悪い 到底 助かる 思う ど さる 音 眼 出る 記憶 いくら 考え出す として 分る
     38 tokens: ふと 付く 見る 書生 おる 兄弟 一疋 見える ぬ 肝心 母親 姿 隠す しまう 上今 違う 無 暗に 明るい 眼 明く られる ぬ くらい はてな 容子 おかしい のそのそ 這い出す 見る 非常 痛い 吾輩 藁 急 笹原 棄てる られる
    274 tokens: ようやく 思い 笹原 這い出す 向う 大きな 池 吾輩 池 坐る た よい 考える 別に という 分別 出る しばらく 泣く た 書生 迎 来る くれる 考え付く ニャー ニャー 試み やる 来る そのうち 池 さらさら 風 渡る 暮れ かかる 腹 非常 減る 来る 泣く たい 声 出る 仕方 よい 食物 こう 決心 そる り そろりと 池 り 廻る 始める どうも 非常 苦しい 我慢 無理やり 這う 行く ようやく 何となく 人間 臭い 出る 這入る た どうにか 思う 竹垣 崩れる 穴 とある 邸 もぐり込む 縁 不思議 もし 竹垣 破れる ない だ 吾輩 ついに 路傍 餓死 かも 知れる 一樹 蔭 よく 云う 垣根 穴 今日 至る 吾輩 隣家 毛 訪問 通路 なる さて 邸 忍び込む ものの これから どうして 善い 分る 暗い 腹 減る 寒い 寒い 雨 降る 来る という 始末 もう 一刻 猶予 出来る ない なる 仕方 とにかく 明るい 暖かい あるく 行く 考える すでに 這入る おる 吾輩 書生 以外 人間 再び 見る べし 機会 遭遇 逢う 書生 一層 乱暴 吾輩 見る 否や いきなり 頸筋 つかむ 表 抛り出す 駄目 思う 眼 ねぶる 運 天 任せる しかし ひもじい 寒い どうしても 我慢 出来る 吾輩 再び おさん 隙 台所 這う 上る すると 間もなく 投げ出す れる 吾輩 投げ出す れる 這う 上る 這う 上る 投げ出す れる 遍 繰り返す 記憶 おさん 云う つくづく なる この間 おさん 馬 偸 んで 返報 やる やっと 胸 痞 下りる 吾輩 最後 つまみ出す れる 主人 騒々しい いう ながら 出る 来る 下女 吾輩 ぶら下げる 主人 向ける 宿 ない 小 猫 いくら 出す 出す 御台 上る 来る 困る いう 主人 鼻 黒い 毛 撚る ながら 吾輩 顔 しばらく 眺める おる やがて そん だ 置く やる といった 奥 這入る しまう 主人 あまり 聞く ぬ 見える 下女 口惜しい 吾輩 台所 抛り出す かくして 吾輩 ついに 住 極める
    101 tokens: 吾輩 主人 滅多 吾輩 顔 合せる 職業 教師 学校 帰る 終日 書斎 這入る ぎりほとんど 出る 来る 大変 勉強 思う 当人 勉強 ごとし 見せる しかし 実際 いう 勤勉 吾輩 時々 忍び足 書斎 覗く 見る よく 昼寝 時々 読みかける 本 涎 たらす 胃弱 皮膚 色 淡い 黄色 帯びる 弾力 不 活溌 徴候 あらわす 癖 大飯 食う 大飯 食う タカジヤスターゼ 飲む 飲む 書物 ひろげる ページ 読む 眠い 涎 本 垂らす 毎夜 繰り返す 日課 吾輩 猫 ながら 時々 考える 教師 という 実に 人間 生れる た 教師 限る こんなに 寝る 勤まる だ 猫 出来る ぬ それでも 主人 云う 教師 つらい 友達 来る 何とか かん 不平 鳴らす

Some preprocessing steps, such as removing stop words and erasing punctuation, return empty documents. Remove the empty documents using the removeEmptyDocuments function.

documents = removeEmptyDocuments(documents);

Create Preprocessing Function

Creating a function that performs preprocessing can be useful to prepare different collections of text data in the same way. For example, you can use a function to preprocess new data using the same steps as the training data.

Create a function which tokenizes and preprocesses the text data to use for analysis. The function preprocessJapaneseText, performs these steps:

  1. Tokenize the text using tokenizedDocument.

  2. Erase punctuation using erasePunctuation.

  3. Remove a list of stop words (such as "あそこ", "あたり", and "あちら") using removeStopWords.

  4. Lemmatize the words using normalizeWords.

Remove the empty documents after preprocessing using the removeEmptyDocuments function. Removing documents after using a preprocessing function makes it easier to remove corresponding data such as labels from other sources.

In this example, use the preprocessing function preprocessJapaneseText, listed at the end of the example, to prepare the text data.

documents = preprocessJapaneseText(textData);
documents(1:5)
ans = 
  5×1 tokenizedDocument:

    2 tokens: 吾輩 猫
    2 tokens: 夏目 漱石
    0 tokens:
    0 tokens:
    4 tokens: 吾輩 猫 まだ 無い

Remove the empty documents.

documents = removeEmptyDocuments(documents);

Fit Topic Model

Fit a latent Dirichlet allocation (LDA) topic model to the data. An LDA model discovers underlying topics in a collection of documents and infers word probabilities in topics.

To fit an LDA model to the data, you first must create a bag-of-words model. A bag-of-words model (also known as a term-frequency counter) records the number of times that words appear in each document of a collection. Create a bag-of-words model using bagOfWords.

bag = bagOfWords(documents);

Remove the empty documents from the bag-of-words model.

bag = removeEmptyDocuments(bag);

Fit an LDA model with seven topics using fitlda. To suppress the verbose output, set 'Verbose' to 0.

numTopics = 7;
mdl = fitlda(bag,numTopics,'Verbose',0);

Visualize the first four topics using word clouds.

figure
for i = 1:4
    subplot(2,2,i)
    wordcloud(mdl,i);
    title("Topic " + i)
end

Visualize multiple topic mixtures using stacked bar charts. View five input documents at random and visualize the corresponding topic mixtures.

numDocuments = numel(documents);
idx = randperm(numDocuments,5);
documents(idx)
ans = 
  5×1 tokenizedDocument:

     4 tokens: 細君 細君 なかなか さばける
     7 tokens: 進行 せる 山々 どうしても 暮れる くれる 困る
    13 tokens: 来る そんな 仙骨 相手 少々 骨 折れる 過ぎる 宛然 たり 仙 伝 人物
     3 tokens: 先生 譜 下さる
    23 tokens: 立つ 月給 上がる いくら 勉強 褒める くれる 郎 君 独 寂寞 中学 時代 覚える 詩 句 細君 朗吟 細君 ちょっと 分る かねる 返事

topicMixtures = transform(mdl,documents(idx));
figure
barh(topicMixtures(1:5,:),'stacked')
xlim([0 1])
title("Topic Mixtures")
xlabel("Topic Probability")
ylabel("Document")
legend("Topic " + string(1:numTopics),'Location','northeastoutside')

Example Preprocessing Function

The function preprocessJapaneseText, performs these steps:

  1. Tokenize the text using tokenizedDocument.

  2. Erase punctuation using erasePunctuation.

  3. Remove a list of stop words (such as "あそこ", "あたり", and "あちら") using removeStopWords.

  4. Lemmatize the words using normalizeWords.

function documents = preprocessJapaneseText(textData)

% Tokenize the text.
documents = tokenizedDocument(textData);

% Erase the punctuation.
documents = erasePunctuation(documents);

% Remove a list of stop words.
documents = removeStopWords(documents);

% Lemmatize the words.
documents = normalizeWords(documents,'Style','lemma');
end

See Also

| | | | |

Related Topics