次のコードセグメントの出力は、
[array([ 3, 20, 3, 0, 0, 0]), array([3, 0, 0, 0, 0, 0])]
いる今、あなたはすでに(そのスペースを参照してください(」「)とドットも
vocab={'hello':3, '.':5, 'world':20, '/' : 10}
sentences= ['hello world ./hello', 'hello']
vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length=6, vocabulary=vocab)
list(vocab_processor.transform(sentences))
、のは、あなたの質問に答えるためにいくつかの実験を持ってみましょう'。')、どちらも実際にトークン化されていません。あなたのコードで何が起こるかは、テンソルフローが2つの単語だけを特定し、余分なゼロを埋め込んでmax_document_length=3
にすることです。トークン化を実行するには、自分自身でtokenized function
と書くことができます。サンプルコードを以下に示します。
def my_func(iterator):
return (x.split(" ") for x in iterator)
vocab={'hello':3, '.':5, 'world':20, '/' : 10}
sentences= ['hello world ./hello', 'hello']
vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length=6, vocabulary=vocab, tokenizer_fn = my_func)
list(vocab_processor.transform(sentences))
次にコードセグメントの出力は、予想される出力である
[array([ 3, 20, 5, 10, 3, 0]), array([3, 0, 0, 0, 0, 0])]
ようなものです。これがあなたの混乱をはっきりさせることを願って
次に混乱するのは、デフォルトでトークン化される値です。また、私が指し示すしたい
「独自の関数を記述し、自信を持つことが」あなたは混乱することはできませんように私は、ここに
TOKENIZER_RE = re.compile(r"[A-Z]{2,}(?![a-z])|[A-Z][a-z]+(?=[A-Z])|[\'\w\-]+",
re.UNICODE)
def tokenizer(iterator):
"""Tokenizer generator.
Args:
iterator: Input iterator with strings.
Yields:
array of tokens per each value in the input.
"""
for value in iterator:
yield TOKENIZER_RE.findall(value)
を元sourceを投稿してみましょうが、私の提案は次のようになります、あなたが逃したならば、ほんの少しのことをしてください(うまくいけば)。 transform()
機能を使用している場合、min_frequency
引数はデータに適合しないため、機能しません。次のコードで効果を確認しようと、
for i in range(6):
vocab_processor = learn.preprocessing.VocabularyProcessor(
max_document_length=7, min_frequency=i)
tokens = vocab_processor.transform(["a b c d e f","a b c d e","a b c" , "a b", "a"])
print(list(vocab_processor.transform(sentences))[0])
出力:わずかなコードのために再び
[1 2 3 4 5 6 0]
[1 2 3 4 5 6 0]
[1 2 3 4 5 6 0]
[1 2 3 4 5 6 0]
[1 2 3 4 5 6 0]
[1 2 3 4 5 6 0]
、
for i in range(6):
vocab_processor = learn.preprocessing.VocabularyProcessor(
max_document_length=7, min_frequency=i)
tokens = vocab_processor.fit_transform(["a b c d e f","a b c d e","a b c" , "a b", "a"])
print(list(tokens)[0])
出力:
[1 2 3 4 5 6 0]
[1 2 3 4 5 0 0]
[1 2 3 0 0 0 0]
[1 2 0 0 0 0 0]
[1 0 0 0 0 0 0]
[0 0 0 0 0 0 0]
ですまさに私がやっていること。ただし、vocab = {'hello':3、 '。':5、 'world':20}を使用し、list(processor.transform(['hello world。'、 'hello']))を使用すると、出力は[配列([3、20、0])、配列([3、0、0])]。したがって、文章は、提供された語彙に従って変換されませんでした。 to 5 – Lemon
プロセッサで使用されるデフォルトのトークナイザは、おそらくdotを有効なトークンとして扱いません。それは正常な言葉のために働きますか? – greeness
はい、それは単語のために働く。しかし、私の場合、句読点も「単語」であり、それに応じて扱われるべきです。 – Lemon