Main Content

単純な前処理関数の作成

この例では、[テキスト データの前処理] ライブ エディター タスクを使用して、解析のためにテキスト データをクリーニングおよび前処理する関数を作成する方法を示します。

テキスト データは大きくなる可能性があり、統計解析に悪影響を与える多くのノイズが含まれる可能性があります。たとえば、テキスト データには次のような内容が含まれます。

  • 大文字と小文字のバリエーション (たとえば "new" と "New")

  • 語形のバリエーション (たとえば "walk" と "walking")

  • ノイズを付加する単語 (たとえば "the" や "of" などの "ストップ ワード")

  • 句読点と特殊文字

  • HTML および XML のタグ

次のワード クラウドは、工場レポートの生テキスト データに適用された単語頻度解析と、同じテキスト データの前処理済みバージョンに適用された単語頻度解析を示しています。

Two word clouds showing words in different font sizes. Larger font sizes indicate more frequent words in the data. The word cloud on the left has title "Raw Data" and highlights punctuation and words like "the" and "in". Words like "assembler" and "mixer" have relatively small font size. The word cloud on the right has title "Clean Data" and highlights words like "assembler" and "mixer". Words like "the" and "in" do not appear in the word cloud.

ほとんどのワークフローでは、さまざまなテキスト データのコレクションを同じ方法で簡単に準備するための前処理関数が必要です。たとえば、モデルに学習させる際、同じ手順を使用して学習データと新しいデータを前処理するために、同じ関数を使用できます。

[テキスト データの前処理] ライブ エディター タスクを使用して、テキスト データを対話形式で前処理し、結果を可視化することができます。この例では、[テキスト データの前処理] ライブ エディター タスクを使用して、テキスト データの前処理および再利用可能な関数の作成を行うコードを生成します。ライブ エディター タスクの詳細については、ライブ スクリプトへの対話型タスクの追加を参照してください。

まず、工場レポート データを読み込みます。データには、工場の障害イベントを説明するテキストが含まれています。

tbl = readtable("factoryReports.csv")

A table with variables "Description", "Category", and "Urgency". The "Description" variable contains textual descriptions such as "Items are occasionally getting stuck in the scanner spools". The "Category" variable contains categorical labels such as "Mechanical Failure", and the "Urgency" variable contains categorical labels such as "Medium".

[テキスト データの前処理] ライブ エディター タスクを開きます。タスクを開くには、まずタスク名を入力し、提案されたコマンドの補完候補から [テキスト データの前処理] を選択します。または、[ライブ エディター] タブで、[タスク][テキスト データの前処理] を選択します。

Drop down list showing suggested command completions. The only suggestion in the list is for the Preprocess Text Data task, and is selected.

以下のオプションを使用してテキストを前処理します。

  1. 入力データとして tbl を選択し、table 変数 Description を選択します。

  2. 自動言語検出を使用してテキストをトークン化します。

  3. レンマ化を改善するには、トークンの詳細に品詞タグを追加します。

  4. レンマ化を使用して単語を正規化します。

  5. 3 文字未満または 14 文字を超える単語を削除します。

  6. ストップ ワードを削除します。

  7. 句読点を消去します。

  8. 前処理されたテキストをワード クラウドで表示します。

Preprocess Text Data task with fields corresponding to preprocessing options highlighed with numbered red rectangles. The image highlights these options in order: "Data", "Language", "Add part-of-speech tags", "Normalize words", "Minimum word length", "Maximum word length", "Remove stop words", "Erase punctuation", and "Show word cloud".

A word cloud showing words in different font sizes. Larger font sizes indicate more frequent words in the data. The word cloud highlights words like "assembler" and "mixer". Words like "the" and "in" do not appear in the word cloud.

[テキスト データの前処理] ライブ エディター タスクは、ライブ スクリプトでコードを生成します。生成されたコードには、選択したオプションが反映され、表示を生成するためのコードが含まれています。生成されたコードを表示するには、タスク パラメーター領域の下部にある [コードの表示] をクリックします。タスクが展開され、生成されたコードが表示されます。

MATLAB code generated by Preprocess Text Data task

既定では、生成されたコードは MATLAB® ワークスペースに返される出力変数の名前として preprocessedText を使用します。別の出力変数名を指定するには、タスクの最上部にある要約行に新しい名前を入力します。

First option of the Preprocess Text Data task

コードで同じ手順を再利用するには、テキスト データを入力として受け取り、前処理されたテキスト データを出力する関数を作成します。この関数は、スクリプトの最後に含めることも、別のファイルとして含めることもできます。例の最後にリストされている関数 preprocessTextData は、[テキスト データの前処理] ライブ エディター タスクによって生成されたコードを使用します。

この関数を使用するには、table を関数 preprocessTextData への入力として指定します。

documents = preprocessTextData(tbl);

前処理関数

関数 preprocessTextData は、[テキスト データの前処理] ライブ エディター タスクによって生成されたコードを使用します。この関数は、table tbl を入力として受け取り、前処理されたテキスト preprocessedText を返します。この関数は、以下の手順を実行します。

  1. 入力 table の変数 Description からテキスト データを抽出します。

  2. tokenizedDocument を使用してテキストをトークン化します。

  3. addPartOfSpeechDetails を使用して品詞の詳細を追加します。

  4. normalizeWords を使用して単語をレンマ化します。

  5. removeShortWords を使用して、2 文字以下の単語を削除します。

  6. removeLongWords を使用して、15 文字以上の単語を削除します。

  7. removeStopWords を使用して、ストップ ワード ("and"、"of"、"the" など) を削除します。

  8. erasePunctuation を使用して句読点を消去します。

function preprocessedText = preprocessTextData(tbl)

%% Preprocess Text
preprocessedText = tbl.Description;

% Tokenize
preprocessedText = tokenizedDocument(preprocessedText);

% Add token details
preprocessedText = addPartOfSpeechDetails(preprocessedText);

% Change and remove words
preprocessedText = normalizeWords(preprocessedText,Style="lemma");
preprocessedText = removeShortWords(preprocessedText,2);
preprocessedText = removeLongWords(preprocessedText,15);
preprocessedText = removeStopWords(preprocessedText,IgnoreCase=false);
preprocessedText = erasePunctuation(preprocessedText);

end

より詳細なワークフローを示す例については、Preprocess Text Data in Live Editorを参照してください。テキスト解析の次のステップとして、分類モデルの作成を試すか、トピック モデルを使用してデータを解析できます。例については、分類用の単純なテキスト モデルの作成トピック モデルを使用したテキスト データの解析を参照してください。

参考

| | | | | | |

関連するトピック