이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
일본어 텍스트 데이터 분석하기
R2026a이 예제에서는 토픽 모델을 사용하여 일본어 텍스트 데이터를 가져와서 준비하고 분석하는 방법을 보여줍니다.
일본어 텍스트 데이터가 클수록 통계 분석에 부정적 영향을 주는 잡음 데이터가 많이 들어 있을 수 있습니다. 예를 들어, 텍스트 데이터에 다음이 포함되어 있을 수 있습니다.
어형이 변형된 단어. 예를 들면 "難しい"("어렵다")와 "難しかった"("어려웠다")
잡음을 추가하는 단어. 예를 들면 "あそこ"("저기"), "あたり"("~당"), "あちら"("저쪽") 같은 불용어
문장 부호 및 특수 문자
다음 워드 클라우드는 공장 보고서 세트의 원시 텍스트 데이터에 단어 빈도 분석을 적용한 버전과 동일한 텍스트 데이터를 전처리한 버전을 나타낸 것입니다.

이 예제에서는 먼저 일본어 텍스트 데이터를 가져와서 준비하는 방법을 보여준 다음, LDA(잠재 디리클레 할당) 모델을 사용하여 텍스트 데이터를 분석하는 방법을 보여줍니다. LDA 모델은 문서 모음에서 기저 토픽을 발견하고 토픽 내 단어 확률을 추정하는 토픽 모델입니다.
데이터 가져오기
예제 데이터 "factoryReportsJP.csv"를 불러옵니다. 이 데이터에는 각 이벤트에 대한 일본어 텍스트 설명과 범주 레이블이 포함된 공장 보고서가 들어 있습니다. readtable 함수를 사용하여 테이블을 읽어온 후 텍스트를 string형으로 추출합니다. ReadVariableNames 옵션을 false로 설정하여 테이블 변수에 이름 "Var1", "Var2", ..., "Var5"를 할당합니다.
filename = "factoryReportsJP.csv"; data = readtable(filename,"TextType","string","ReadVariableNames",false);
테이블의 처음 몇 개의 행을 표시합니다. 테이블에는 다음 변수가 포함되어 있습니다.
Var1— 설명Var2— 범주Var3— 긴급성Var4— 해결Var5— 비용
변수 Var1에서 텍스트 데이터를 추출한 다음 처음 몇 개의 보고서를 표시합니다.
textData = data.Var1; textData(1:10)
ans = 10×1 string array
"スキャナーのスプールにアイテムが詰まることがある。"
"アセンブラのピストンからガタガタと大きな音がします。"
"工場起動時に電源が切れる。"
"アセンブラのコンデンサが飛ぶ。"
"ミキサーでヒューズが切れる。"
"コンストラクション・エージェントのパイプが破裂して冷却水を噴射している。"
"ミキサーでヒューズが飛んだ。"
"ベルトから物が続々と落ちてきます。"
"ベルトから物が落下する。"
"スキャナーのリールが割れている、すぐにカーブし始める。"
텍스트 데이터를 워드 클라우드로 시각화합니다.
figure wordcloud(textData);

문서 토큰화하기
tokenizedDocument를 사용하여 텍스트를 토큰화한 다음 처음 몇 개 문서를 표시합니다.
documents = tokenizedDocument(textData); documents(1:10)
ans =
10×1 tokenizedDocument:
11 tokens: スキャナー の スプール に アイテム が 詰まる こと が ある 。
12 tokens: アセンブラ の ピストン から ガタガタ と 大きな 音 が し ます 。
8 tokens: 工場 起動 時 に 電源 が 切れる 。
6 tokens: アセンブラ の コンデンサ が 飛ぶ 。
6 tokens: ミキサー で ヒューズ が 切れる 。
17 tokens: コンストラクション ・ エージェント の パイプ が 破裂 し て 冷却 水 を 噴射 し て いる 。
7 tokens: ミキサー で ヒューズ が 飛ん だ 。
11 tokens: ベルト から 物 が 続々 と 落ち て き ます 。
7 tokens: ベルト から 物 が 落下 する 。
14 tokens: スキャナー の リール が 割れ て いる 、 すぐ に カーブ し 始める 。
품사 태그 가져오기
토큰 세부 정보를 가져온 다음 처음 몇 개 토큰에 대한 세부 정보를 표시합니다.
tdetails = tokenDetails(documents); head(tdetails)
Token DocumentNumber LineNumber Type Language PartOfSpeech Lemma Entity
___________ ______________ __________ _______ ________ ____________ ___________ __________
"スキャナー" 1 1 letters ja noun "スキャナー" non-entity
"の" 1 1 letters ja adposition "の" non-entity
"スプール" 1 1 letters ja noun "スプール" non-entity
"に" 1 1 letters ja adposition "に" non-entity
"アイテム" 1 1 letters ja noun "アイテム" non-entity
"が" 1 1 letters ja adposition "が" non-entity
"詰まる" 1 1 letters ja verb "詰まる" non-entity
"こと" 1 1 letters ja noun "こと" non-entity
테이블의 PartOfSpeech 변수에는 토큰의 품사 태그가 포함되어 있습니다. 모두 명사로만 구성된 워드 클라우드와 모두 형용사로만 구성된 워드 클라우드를 각각 만듭니다.
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) wc = wordcloud(tokens); title("Adjectives")

분석할 텍스트 데이터 준비하기
불용어를 제거합니다.
documents = removeStopWords(documents); documents(1:10)
ans =
10×1 tokenizedDocument:
5 tokens: スキャナー スプール アイテム 詰まる 。
6 tokens: アセンブラ ピストン ガタガタ 大きな 音 。
5 tokens: 工場 起動 電源 切れる 。
4 tokens: アセンブラ コンデンサ 飛ぶ 。
4 tokens: ミキサー ヒューズ 切れる 。
8 tokens: コンストラクション ・ エージェント パイプ 破裂 冷却 噴射 。
4 tokens: ミキサー ヒューズ 飛ん 。
6 tokens: ベルト 物 続々 落ち き 。
4 tokens: ベルト 物 落下 。
8 tokens: スキャナー リール 割れ 、 すぐ カーブ 始める 。
문장 부호를 지웁니다.
documents = erasePunctuation(documents); documents(1:10)
ans =
10×1 tokenizedDocument:
4 tokens: スキャナー スプール アイテム 詰まる
5 tokens: アセンブラ ピストン ガタガタ 大きな 音
4 tokens: 工場 起動 電源 切れる
3 tokens: アセンブラ コンデンサ 飛ぶ
3 tokens: ミキサー ヒューズ 切れる
6 tokens: コンストラクション エージェント パイプ 破裂 冷却 噴射
3 tokens: ミキサー ヒューズ 飛ん
5 tokens: ベルト 物 続々 落ち き
3 tokens: ベルト 物 落下
6 tokens: スキャナー リール 割れ すぐ カーブ 始める
normalizeWords를 사용하여 텍스트에서 표제어를 추출합니다.
documents = normalizeWords(documents); documents(1:10)
ans =
10×1 tokenizedDocument:
4 tokens: スキャナー スプール アイテム 詰まる
5 tokens: アセンブラ ピストン ガタガタ 大きな 音
4 tokens: 工場 起動 電源 切れる
3 tokens: アセンブラ コンデンサ 飛ぶ
3 tokens: ミキサー ヒューズ 切れる
6 tokens: コンストラクション エージェント パイプ 破裂 冷却 噴射
3 tokens: ミキサー ヒューズ 飛ぶ
5 tokens: ベルト 物 続々 落ちる くる
3 tokens: ベルト 物 落下
6 tokens: スキャナー リール 割れる すぐ カーブ 始める
불용어 제거, 문장 부호 지우기 같은 일부 전처리 단계를 거치면 빈 문서가 반환됩니다. removeEmptyDocuments 함수를 사용하여 빈 문서를 제거합니다.
documents = removeEmptyDocuments(documents);
전처리 함수 만들기
전처리를 수행하는 함수를 만들면 서로 다른 텍스트 데이터 모음을 동일한 방식으로 준비하는 데 유용할 수 있습니다. 예를 들어, 함수를 사용하여 훈련 데이터와 동일한 단계로 새 데이터를 전처리할 수 있습니다.
분석에 사용할 텍스트 데이터를 토큰화하고 전처리하는 함수를 만듭니다. 함수 preprocessText는 다음 단계를 수행합니다.
tokenizedDocument를 사용하여 텍스트를 토큰화합니다.erasePunctuation을 사용하여 문장 부호를 지웁니다.removeStopWords를 사용하여 불용어 목록(예: "あそこ", "あたり", "あちら")을 제거합니다.normalizeWords를 사용하여 단어의 표제어를 추출합니다.
removeEmptyDocuments 함수를 사용하여, 전처리한 후의 빈 문서를 제거합니다. 별도의 배열에 저장된 관련 데이터(예: 타임스탬프 또는 레이블)가 있는 경우에는 그에 대응하는 요소도 제거합니다. 제거할 요소의 인덱스를 얻기 위해 제거된 문서의 인덱스도 반환합니다.
이 예제에서는 전처리 함수 preprocessText(예제 끝에 나와 있음)를 사용하여 텍스트 데이터를 준비합니다.
documents = preprocessText(textData); documents(1:5)
ans =
5×1 tokenizedDocument:
4 tokens: スキャナー スプール アイテム 詰まる
5 tokens: アセンブラ ピストン ガタガタ 大きな 音
4 tokens: 工場 起動 電源 切れる
3 tokens: アセンブラ コンデンサ 飛ぶ
3 tokens: ミキサー ヒューズ 切れる
빈 문서를 제거합니다.
documents = removeEmptyDocuments(documents);
토픽 모델 피팅하기
데이터에 LDA(잠재 디리클레 할당) 토픽 모델을 피팅합니다. LDA 모델은 문서 모음에서 기저 토픽을 발견하고 토픽 내 단어 확률을 추정합니다.
데이터에 LDA 모델을 피팅하려면 먼저 bag-of-words 모델을 만들어야 합니다. bag-of-words 모델(단어 빈도 카운터라고도 함)은 단어가 문서 모음의 각 문서에서 나타나는 횟수를 기록합니다. bagOfWords를 사용하여 bag-of-words 모델을 만듭니다.
bag = bagOfWords(documents);
bag-of-words 모델에서 빈 문서를 제거합니다.
bag = removeEmptyDocuments(bag);
fitlda를 사용하여 7개 토픽으로 LDA 모델을 피팅합니다. 세부 정보가 출력되지 않도록 하려면 'Verbose'를 0으로 설정하십시오.
numTopics = 7;
mdl = fitlda(bag,numTopics,"Verbose",0);워드 클라우드를 사용하여 처음 4개 토픽을 시각화합니다.
figure for i = 1:4 subplot(2,2,i) wordcloud(mdl,i); title("Topic " + i) end

누적형 막대 차트를 사용하여 여러 토픽 혼합을 시각화합니다. 무작위로 5개의 입력 문서를 표시하고 해당하는 토픽 혼합을 시각화합니다.
numDocuments = numel(documents); idx = randperm(numDocuments,5); documents(idx)
ans =
5×1 tokenizedDocument:
4 tokens: ミキサー 大きな 音 出る
5 tokens: スキャナー 熱 発す 動く ない
3 tokens: ミキサー 冷却 漏れる
4 tokens: ソーター 制御 電源 故障
2 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")

예제 전처리 함수
함수 preprocessText는 다음 단계를 수행합니다.
tokenizedDocument를 사용하여 텍스트를 토큰화합니다.erasePunctuation을 사용하여 문장 부호를 지웁니다.removeStopWords를 사용하여 불용어 목록(예: "あそこ", "あたり", "あちら")을 제거합니다.normalizeWords를 사용하여 단어의 표제어를 추출합니다.
function documents = preprocessText(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
참고 항목
tokenizedDocument | removeStopWords | stopWords | addPartOfSpeechDetails | tokenDetails | normalizeWords