テキスト分析 特定の品詞のみを対象

4 views (last 30 days)
TS
TS on 25 Feb 2021
Commented: TS on 1 Mar 2021
テキストを分析する際、トークン化後、ストップワードを削除したり、句読点を削除したりすると思いますが、その際、特定の品詞のみ(名詞、形容詞、動詞など)を対象することは可能でしょうか。もしくは、Nグラムを行う際に、特定の品詞のみを対象にすることは可能でしょうか。

Accepted Answer

Misa Taguchi
Misa Taguchi on 26 Feb 2021
こんにちは。可能だと思われます。以下に簡単なデモを作成いたしましたが、こちらの処理ではいかがでしょうか。
%% 解析用データの読込み(「吾輩は猫である」を読み込んでいます)
url = "https://www.aozora.gr.jp/cards/000148/files/789_14547.html";
options = weboptions('CharacterEncoding','Shift_JIS');
code = webread(url,options);
textData = extractHTMLText(code);
textData = string(split(textData,newline));
idx = textData == "";
textData(idx) = [];
%% トークン化
documents = tokenizedDocument(textData);
%% 品詞情報の取得
tdetails = tokenDetails(documents);
head(tdetails)
%% 名詞の抽出
idx = tdetails.PartOfSpeech == "noun";
tokens = tdetails(idx,:);
for ii = 1:max(tokens.DocumentNumber)
try
str(ii,:) = join(tokens.Token(tokens.DocumentNumber == ii));
end
end
%% 名詞のストップワード削除
documents = tokenizedDocument(str);
documents = removeStopWords(documents);
%% Nグラムの作成(この例ではBigram)
bag = bagOfNgrams(documents,'NgramLengths',2);
  3 Comments
Misa Taguchi
Misa Taguchi on 1 Mar 2021
無事に実装できたとのこと安心いたしました。ご記載の処理では、
idx = textData == "";
によりtextDataの中の""の部分(=テキストが空の行)のインデックス(idx)を探し、
textData(idx) = [];
により、該当する行を削除しています。
以下のコードにより、該当の処理前後でtextDataがどう変化するか、ご覧いただけるかと思います。
%% 解析用データの読込み(「吾輩は猫である」を読み込んでいます)
url = "https://www.aozora.gr.jp/cards/000148/files/789_14547.html";
options = weboptions('CharacterEncoding','Shift_JIS');
code = webread(url,options);
textData = extractHTMLText(code);
textData = string(split(textData,newline));
textData(1:10) % 追加
idx = textData == "";
textData(idx) = [];
textData(1:10) % 追加
TS
TS on 1 Mar 2021
ご回答ありがとうございました。空の行を削除していることが確認できました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!