文本中的Tokenizer使用Tensorflow实现

处理自然语言处理问题,使用深度学习方法搭建神经网络。除去文本预处理,比如去除无关符号、停用词等,最基础的一步操作便是将文本中的词或者字映射成数字ID。下面主要用Tensorflow方法实现这种操作。

from tensorflow.contrib import learn
import numpy as np
import jieba

data = [
    "自然语言处理将是人工智能发展中最瑰丽的皇冠",
    "深度学习应用于工业生产将带来无限的可能",
    "我爱NLP"
]
fit_data = ["谁将是自然语言处理的领头人,赋能工业"]
#自定义分词器
def tokenizer(fit_data):
    tokenizer_document = []
    for text in fit_data:
        content = jieba.cut(text)
        stopwords = [',', '。', '、']
        outstr = ""
        for word in content:
            if word not in stopwords:
                outstr += word
                outstr += " "
        tokenizer_document.append(outstr)
    return tokenizer_document

#tf提供的工具,将数据填充为最大长度,默认0填充,其中还可以自定义分词器
vocab_processor = learn.preprocessing.VocabularyProcessor(10)
data = tokenizer(data)
x = np.array(list(vocab_processor.fit_transform(data)))
#查看建立的Tokenizer词表
vocab_dict = vocab_processor.vocabulary_._mapping
print(vocab_dict)
#{'': 0, '自然语言': 1, '处理': 2, '将': 3, '是': 4, '人工智能': 5, '发展': 6, '中': 7, '最': 8, '瑰丽': 9, '的': 10, '皇冠': 11, '深度': 12, '学习': 13, '应用': 14, '于': 15, '工业生产': 16, '带来': 17, '无限': 18, '可能': 19, '我': 20, '爱': 21, 'NLP': 22}
#保存词表
vocab_processor.save("vocab")

#加载词表
vocab_path = "vocab"
vocab_processor = learn.preprocessing.VocabularyProcessor.restore(vocab_path)


#将新句子映射成数字ID序列,其中不在词表中会默认填充为0
x_raw = tokenizer(fit_data)
x_test = np.array(list(vocab_processor.transform(x_raw)))
print(x_test)
#[[ 0  3  4  1  2 10  0  0  0  0]]

 需要注意的一点是,我们需要定义分词器,不然得到的是将整句作用一个Token。

 

你可能感兴趣的:(NLP)