Main Content

tokenizedDocument

テキスト解析用のトークン化された文書の配列

説明

トークン化された文書は、テキスト解析に使用される単語 ("トークン" とも呼ばれる) のコレクションとして表される文書です。

トークン化された文書は、次を行うために使用します。

  • Web アドレス、顔文字、絵文字、ハッシュタグなど、テキスト内の複雑なトークンを検出する。

  • 関数 removeWords または関数 removeStopWords を使用して、ストップ ワードなどの単語を削除する。

  • 関数 normalizeWords を使用して、ステミングやレンマ化などの単語レベルの前処理タスクを実行する。

  • bagOfWords オブジェクトおよび bagOfNgrams オブジェクトを使用して、単語および n-gram の頻度を解析する。

  • 関数 addSentenceDetails と関数 addPartOfSpeechDetails を使用して、文の詳細と品詞の詳細を追加する。

  • 関数 addEntityDetails を使用してエンティティ タグを追加する。

  • 関数 addDependencyDetails を使用して、文法的依存関係の詳細を追加する。

  • 関数 tokenDetails を使用してトークンの詳細を表示する。

関数は、英語、日本語、ドイツ語、および韓国語のテキストをサポートしています。他の言語で tokenizedDocument を使用する方法については、言語に関する考慮事項を参照してください。

作成

説明

documents = tokenizedDocument は、トークンをもたないスカラーのトークン化文書を作成します。

documents = tokenizedDocument(str) は、string 配列の要素をトークン化し、トークン化文書配列を返します。

documents = tokenizedDocument(str,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、追加のオプションを指定します。

入力引数

すべて展開する

入力テキスト。string 配列、文字ベクトル、文字ベクトルの cell 配列、または string 配列の cell 配列として指定します。

入力テキストがまだ単語に分割されていない場合、str は string 配列、文字ベクトル、文字ベクトルの cell 配列、または string スカラーの cell 配列でなければなりません。

例: ["an example of a short document";"a second short document"]

例: 'an example of a single document'

例: {'an example of a short document';'a second short document'}

入力テキストが既に単語に分割されている場合は、'TokenizeMethod''none' に指定します。str に 1 つの文書が含まれる場合、これは単語の string ベクトルであるか、文字ベクトルの行 cell 配列であるか、または単語から成る 1 つの string ベクトルを含む cell 配列でなければなりません。str に複数の文書が含まれる場合、これは string 配列の cell 配列でなければなりません。

例: ["an" "example" "document"]

例: {'an','example','document'}

例: {["an" "example" "of" "a" "short" "document"]}

例: {["an" "example" "of" "a" "short" "document"];["a" "second" "short" "document"]}

データ型: string | char | cell

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: 'DetectPatterns',{'email-address','web-address'} は、電子メール アドレスと Web アドレスを検出します。

文書をトークン化する方法。'TokenizeMethod' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'unicode' – Unicode® Standard Annex #29[1]と ICU トークナイザー[2]に基づく規則を使用して、入力テキストをトークン化します。str が cell 配列の場合、str の要素は string スカラーまたは文字ベクトルでなければなりません。'Language''en' または 'de' の場合、'unicode' が既定値になります。

  • 'mecab' – MeCab トークナイザー[3]を使用して、日本語と韓国語のテキストをトークン化します。'Language''ja' または 'ko' の場合、'mecab' が既定値になります。

  • mecabOptions オブジェクト – mecabOptions オブジェクトで指定された MeCab オプションを使用して、日本語と韓国語のテキストをトークン化します。

  • 'none' – 入力テキストをトークン化しません。

入力テキストが既に単語に分割されている場合は、'TokenizeMethod''none' に指定します。str に 1 つの文書が含まれる場合、これは単語の string ベクトルであるか、文字ベクトルの行 cell 配列であるか、または単語から成る 1 つの string ベクトルを含む cell 配列でなければなりません。str に複数の文書が含まれる場合、これは string 配列の cell 配列でなければなりません。

検出する複雑なトークンのパターン。'DetectPatterns' と、'none''all'、または次の 1 つ以上を含む string 配列または cell 配列で構成されるコンマ区切りのペアとして指定します。

  • 'email-address' – 電子メール アドレスを検出します。たとえば、"user@domain.com" を単一のトークンとして扱います。

  • 'web-address' – Web アドレスを検出します。たとえば、"https://www.mathworks.com" を単一のトークンとして扱います。

  • 'hashtag' – ハッシュタグを検出します。たとえば、"#MATLAB" を単一のトークンとして扱います。

  • 'at-mention' – @-メンションを検出します。たとえば、"@MathWorks" を単一のトークンとして扱います。

  • 'emoticon' – 顔文字を検出します。たとえば、":-D" を単一のトークンとして扱います。

DetectPatterns'none' の場合、関数は複雑なトークン パターンを検出しません。DetectPatterns'all' の場合、関数はこのリストの複雑なトークン パターンすべてを検出します。

例: 'DetectPatterns','hashtag'

例: 'DetectPatterns',{'email-address','web-address'}

データ型: char | string | cell

検出するカスタム トークン。'CustomTokens' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • カスタム トークンが格納された string 配列、文字ベクトル、または文字ベクトルの cell 配列。

  • Token という名前の列にカスタム トークンが格納され、Type という名前の列に対応するトークン タイプが格納された table。

カスタム トークンを string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定した場合、関数によってトークン タイプ "custom" が割り当てられます。カスタム トークン タイプを指定するには、table 入力を使用します。トークン タイプを表示するには、関数 tokenDetails を使用します。

例: 'CustomTokens',["C++" "C#"]

データ型: char | string | table | cell

検出する正規表現。'RegularExpressions' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 正規表現を含む string 配列、文字ベクトル、または文字ベクトルの cell 配列。

  • Pattern という名前の列に正規表現が格納され、Type という名前の列に対応するトークン タイプが格納された table。

正規表現を string 配列、文字ベクトル、または文字ベクトルの cell 配列として指定した場合、関数によってトークン タイプ "custom" が割り当てられます。カスタム トークン タイプを指定するには、table 入力を使用します。トークン タイプを表示するには、関数 tokenDetails を使用します。

例: 'RegularExpressions',["ver:\d+" "rev:\d+"]

データ型: char | string | table | cell

Web アドレス検出に使用するトップレベル ドメイン。'TopLevelDomains' と、文字ベクトル、string 配列、または文字ベクトルの cell 配列で構成されるコンマ区切りのペアとして指定します。既定では、関数は topLevelDomains の出力を使用します。

このオプションは、'DetectPatterns''all' であるか 'web-address' を含む場合にのみ適用されます。

例: 'TopLevelDomains',["com" "net" "org"]

データ型: char | string | cell

言語。'Language' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'en' – 英語。このオプションは、'TokenizeMethod' の既定値も 'unicode' に設定します。

  • 'ja' – 日本語。このオプションは、'TokenizeMethod' の既定値も 'mecab' に設定します。

  • 'de' – ドイツ語。このオプションは、'TokenizeMethod' の既定値も 'unicode' に設定します。

  • 'ko' – 韓国語。このオプションは、'TokenizeMethod' の既定値も 'mecab' に設定します。

値を指定しなかった場合、この関数は関数 corpusLanguage を使用して入力テキストから言語を検出します。

このオプションは、トークンの言語の詳細を指定します。トークンの言語の詳細を表示するには、tokenDetails を使用します。これらの言語の詳細によって、関数 removeStopWordsaddPartOfSpeechDetailsnormalizeWordsaddSentenceDetails、および addEntityDetails のトークンに対する動作が決まります。

Text Analytics Toolbox™ での言語サポートの詳細については、言語に関する考慮事項を参照してください。

例: 'Language','ja'

プロパティ

すべて展開する

文書内の一意の単語。string 配列として指定します。単語は順不同で表示されます。

データ型: string

オブジェクト関数

すべて展開する

erasePunctuationテキストや文書からの句読点の消去
removeStopWords文書からのストップ ワードの削除
removeWords文書または bag-of-words モデルからの選択単語の削除
normalizeWords単語のステミングまたはレンマ化
correctSpellingCorrect spelling of words
replaceWordsReplace words in documents
replaceNgramsReplace n-grams in documents
removeEmptyDocumentsRemove empty documents from tokenized document array, bag-of-words model, or bag-of-n-grams model
lower小文字への文書の変換
upper大文字への文書の変換
tokenDetailsDetails of tokens in tokenized document array
addSentenceDetailsAdd sentence numbers to documents
addPartOfSpeechDetailsAdd part-of-speech tags to documents
addLanguageDetailsAdd language identifiers to documents
addTypeDetailsAdd token type details to documents
addLemmaDetailsAdd lemma forms of tokens to documents
addEntityDetailsAdd entity tags to documents
addDependencyDetails文書への文法的依存関係の詳細の追加
writeTextDocumentテキスト ファイルへの文書の書き込み
doclength文書配列内の文書の長さ
contextSearch documents for word or n-gram occurrences in context
containsCheck if pattern is substring in documents
containsWordsCheck if word is member of documents
containsNgramsCheck if n-gram is member of documents
splitSentencesSplit text into sentences
joinWords単語連結による文書から string への変換
doc2cell文書から string ベクトルの cell 配列への変換
stringスカラー文書から string ベクトルへの変換
plusAppend documents
replaceReplace substrings in documents
docfunApply function to words in documents
regexprepReplace text in words of documents using regular expression
wordcloudCreate word cloud chart from text, bag-of-words model, bag-of-n-grams model, or LDA model
sentenceChartPlot grammatical dependency parse tree of sentence

すべて折りたたむ

トークン化された文書を string 配列から作成します。

str = [
    "an example of a short sentence" 
    "a second short sentence"]
str = 2x1 string
    "an example of a short sentence"
    "a second short sentence"

documents = tokenizedDocument(str)
documents = 
  2x1 tokenizedDocument:

    6 tokens: an example of a short sentence
    4 tokens: a second short sentence

トークン化された文書を string str から作成します。既定では、関数はハッシュタグ "#MATLAB"、顔文字 ":-D"、および Web アドレス "https://www.mathworks.com/help" を単一のトークンとして扱います。

str = "Learn how to analyze text in #MATLAB! :-D see https://www.mathworks.com/help/";
document = tokenizedDocument(str)
document = 
  tokenizedDocument:

   11 tokens: Learn how to analyze text in #MATLAB ! :-D see https://www.mathworks.com/help/

複雑なトークンとしてハッシュタグのみを検出するには、'DetectPatterns' オプションを 'hashtag' のみに指定します。関数は次に、顔文字 ":-D" と Web アドレス "https://www.mathworks.com/help" を複数のトークンにトークン化します。

document = tokenizedDocument(str,'DetectPatterns','hashtag')
document = 
  tokenizedDocument:

   24 tokens: Learn how to analyze text in #MATLAB ! : - D see https : / / www . mathworks . com / help /

removeStopWords を使用して、文書の配列からストップ ワードを削除します。関数 tokenizedDocument は文書が英語であることを検出するため、removeStopWords は英語のストップ ワードを削除します。

documents = tokenizedDocument([
    "an example of a short sentence" 
    "a second short sentence"]);
newDocuments = removeStopWords(documents)
newDocuments = 
  2x1 tokenizedDocument:

    3 tokens: example short sentence
    3 tokens: second short sentence

Porter ステマーを使用して、文書配列内の単語をステミングします。

documents = tokenizedDocument([
    "a strongly worded collection of words"
    "another collection of words"]);
newDocuments = normalizeWords(documents)
newDocuments = 
  2x1 tokenizedDocument:

    6 tokens: a strongli word collect of word
    4 tokens: anoth collect of word

既定では、関数 tokenizedDocument は記号を含む単語とトークンを分割します。たとえば、関数は "C++" と "C#" を複数のトークンに分割します。

str = "I am experienced in MATLAB, C++, and C#.";
documents = tokenizedDocument(str)
documents = 
  tokenizedDocument:

   14 tokens: I am experienced in MATLAB , C + + , and C # .

記号を含むトークンを関数に分割させないようにするには、'CustomTokens' オプションを使用してカスタム トークンを指定します。

documents = tokenizedDocument(str,'CustomTokens',["C++" "C#"])
documents = 
  tokenizedDocument:

   11 tokens: I am experienced in MATLAB , C++ , and C# .

カスタム トークンのトークン タイプは "custom" です。トークンの詳細を表示します。列 Type には、トークン タイプが格納されています。

tdetails = tokenDetails(documents)
tdetails=11×5 table
        Token        DocumentNumber    LineNumber       Type        Language
    _____________    ______________    __________    ___________    ________

    "I"                    1               1         letters           en   
    "am"                   1               1         letters           en   
    "experienced"          1               1         letters           en   
    "in"                   1               1         letters           en   
    "MATLAB"               1               1         letters           en   
    ","                    1               1         punctuation       en   
    "C++"                  1               1         custom            en   
    ","                    1               1         punctuation       en   
    "and"                  1               1         letters           en   
    "C#"                   1               1         custom            en   
    "."                    1               1         punctuation       en   

独自のトークン タイプを指定するには、Token という名前の列にトークンが格納された table としてカスタム トークンを入力し、Type という名前の列にそのタイプを入力します。記号を含まないトークンにカスタム タイプを割り当てるには、table にもそれを含めます。たとえば、"MATLAB"、"C++"、および "C#" を "programming-language" トークン タイプに割り当てる table を作成します。

T = table;
T.Token = ["MATLAB" "C++" "C#"]';
T.Type = ["programming-language" "programming-language" "programming-language"]'
T=3×2 table
     Token               Type         
    ________    ______________________

    "MATLAB"    "programming-language"
    "C++"       "programming-language"
    "C#"        "programming-language"

カスタム トークンの table を使用してテキストをトークン化し、トークンの詳細を表示します。

documents = tokenizedDocument(str,'CustomTokens',T);
tdetails = tokenDetails(documents)
tdetails=11×5 table
        Token        DocumentNumber    LineNumber            Type            Language
    _____________    ______________    __________    ____________________    ________

    "I"                    1               1         letters                    en   
    "am"                   1               1         letters                    en   
    "experienced"          1               1         letters                    en   
    "in"                   1               1         letters                    en   
    "MATLAB"               1               1         programming-language       en   
    ","                    1               1         punctuation                en   
    "C++"                  1               1         programming-language       en   
    ","                    1               1         punctuation                en   
    "and"                  1               1         letters                    en   
    "C#"                   1               1         programming-language       en   
    "."                    1               1         punctuation                en   

既定では、関数 tokenizedDocument は記号を含む単語とトークンを分割します。たとえば、関数はテキスト "ver:2" を複数のトークンに分割します。

str = "Upgraded to ver:2 rev:3.";
documents = tokenizedDocument(str)
documents = 
  tokenizedDocument:

   9 tokens: Upgraded to ver : 2 rev : 3 .

特定のパターンをもつトークンを関数が分割しないようにするには、'RegularExpressions' オプションを使用してそれらのパターンを指定します。

バージョン番号とリビジョン番号を示すトークンを検出するための正規表現 (それぞれ "ver:""rev:" の後に現れる数字の string) を指定します。

documents = tokenizedDocument(str,'RegularExpressions',["ver:\d+" "rev:\d+"])
documents = 
  tokenizedDocument:

   5 tokens: Upgraded to ver:2 rev:3 .

既定では、カスタム トークンは "custom" のトークン タイプをもちます。トークンの詳細を表示します。列 Type には、トークン タイプが格納されています。

tdetails = tokenDetails(documents)
tdetails=5×5 table
      Token       DocumentNumber    LineNumber       Type        Language
    __________    ______________    __________    ___________    ________

    "Upgraded"          1               1         letters           en   
    "to"                1               1         letters           en   
    "ver:2"             1               1         custom            en   
    "rev:3"             1               1         custom            en   
    "."                 1               1         punctuation       en   

独自のトークン タイプを指定するには、Pattern という名前の列に正規表現が格納され、Type という名前の列にトークン タイプが格納された table として正規表現を入力します。

T = table;
T.Pattern = ["ver:\d+" "rev:\d+"]';
T.Type = ["version" "revision"]'
T=2×2 table
     Pattern        Type   
    _________    __________

    "ver:\d+"    "version" 
    "rev:\d+"    "revision"

カスタム トークンの table を使用してテキストをトークン化し、トークンの詳細を表示します。

documents = tokenizedDocument(str,'RegularExpressions',T);
tdetails = tokenDetails(documents)
tdetails=5×5 table
      Token       DocumentNumber    LineNumber       Type        Language
    __________    ______________    __________    ___________    ________

    "Upgraded"          1               1         letters           en   
    "to"                1               1         letters           en   
    "ver:2"             1               1         version           en   
    "rev:3"             1               1         revision          en   
    "."                 1               1         punctuation       en   

サンプル データを読み込みます。ファイル sonnetsPreprocessed.txt には、シェイクスピアのソネット集の前処理されたバージョンが格納されています。ファイルには、1 行に 1 つのソネットが含まれ、単語がスペースで区切られています。sonnetsPreprocessed.txt からテキストを抽出し、テキストを改行文字で文書に分割した後、文書をトークン化します。

filename = "sonnetsPreprocessed.txt";
str = extractFileText(filename);
textData = split(str,newline);
documents = tokenizedDocument(textData);

"life" という単語を検索します。

tbl = context(documents,"life");
head(tbl)
                            Context                             Document    Word
    ________________________________________________________    ________    ____

    "consumst thy self single life ah thou issueless shalt "        9        10 
    "ainted counterfeit lines life life repair times pencil"       16        35 
    "d counterfeit lines life life repair times pencil pupi"       16        36 
    " heaven knows tomb hides life shows half parts write b"       17        14 
    "he eyes long lives gives life thee                    "       18        69 
    "tender embassy love thee life made four two alone sink"       45        23 
    "ves beauty though lovers life beauty shall black lines"       63        50 
    "s shorn away live second life second head ere beautys "       68        27 

出現箇所を string 配列で表示します。

tbl.Context
ans = 23x1 string
    "consumst thy self single life ah thou issueless shalt "
    "ainted counterfeit lines life life repair times pencil"
    "d counterfeit lines life life repair times pencil pupi"
    " heaven knows tomb hides life shows half parts write b"
    "he eyes long lives gives life thee                    "
    "tender embassy love thee life made four two alone sink"
    "ves beauty though lovers life beauty shall black lines"
    "s shorn away live second life second head ere beautys "
    "e rehearse let love even life decay lest wise world lo"
    "st bail shall carry away life hath line interest memor"
    "art thou hast lost dregs life prey worms body dead cow"
    "           thoughts food life sweetseasond showers gro"
    "tten name hence immortal life shall though once gone w"
    " beauty mute others give life bring tomb lives life fa"
    "ve life bring tomb lives life fair eyes poets praise d"
    " steal thyself away term life thou art assured mine li"
    "fe thou art assured mine life longer thy love stay dep"
    " fear worst wrongs least life hath end better state be"
    "anst vex inconstant mind life thy revolt doth lie o ha"
    " fame faster time wastes life thou preventst scythe cr"
    "ess harmful deeds better life provide public means pub"
    "ate hate away threw savd life saying                  "
    " many nymphs vowd chaste life keep came tripping maide"

tokenizedDocument を使用して日本語のテキストをトークン化します。関数は、日本語のテキストを自動的に検出します。

str = [
    "恋に悩み、苦しむ。"
    "恋の悩みで苦しむ。"
    "空に星が輝き、瞬いている。"
    "空の星が輝きを増している。"];
documents = tokenizedDocument(str)
documents = 
  4x1 tokenizedDocument:

     6 tokens: 恋 に 悩み 、 苦しむ 。
     6 tokens: 恋 の 悩み で 苦しむ 。
    10 tokens: 空 に 星 が 輝き 、 瞬い て いる 。
    10 tokens: 空 の 星 が 輝き を 増し て いる 。

tokenizedDocument を使用してドイツの語テキストをトークン化します。関数は、ドイツ語のテキストを自動的に検出します。

str = [
    "Guten Morgen. Wie geht es dir?"
    "Heute wird ein guter Tag."];
documents = tokenizedDocument(str)
documents = 
  2x1 tokenizedDocument:

    8 tokens: Guten Morgen . Wie geht es dir ?
    6 tokens: Heute wird ein guter Tag .

詳細

すべて展開する

参照

[1] Unicode Text Segmentation. https://www.unicode.org/reports/tr29/

[3] MeCab: Yet Another Part-of-Speech and Morphological Analyzer. https://taku910.github.io/mecab/

バージョン履歴

R2017b で導入

すべて展開する