- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊
构建词典
from torchtext.vocab import build_vocab_from_iterator
from collections import Counter
from torchtext.data.utils import get_tokenizer
import jieba,re,torch
data = [
"我是K同学啊!",
"我是一个深度学习博主,",
"这是我的365天深度学习训练营教案",
"你可以通过百度、微信搜索关键字【K同学啊】找到我"
]
# 中文分词方法
tokenizer = jieba.lcut
# 加载自定义词典
jieba.load_userdict("my_dict.txt")
# 去除标点符号的函数
def remove_punctuation(text):
return re.sub(r'[^\w\s]', '', text)
# 假设我们有一个停用词表,内容如下:
stopwords = set([
"的", "这", "是"
])
# 去除停用词的函数
def remove_stopwords(words):
return [word for word in words if word not in stopwords]
# 定义一个迭代器来返回文本数据中的词汇
def yield_tokens(data_iter):
for text in data_iter:
# 去除标点符号
text = remove_punctuation(text)
# 分词并生成词汇
text = tokenizer(text)
# 去除停用词
text = remove_stopwords(text)
yield text
# 使用build_vocab_from_iterator来构建词汇表
vocab = build_vocab_from_iterator(yield_tokens(data), specials=["<unk>"])
# 将未知的词汇索引为0
vocab.set_default_index(vocab["<unk>"])
build_vocab_from_iterator(iterator: Iterable,
min_freq: int = 1,
specials: Optional[List[str]]=None,
special_first: bool = True,
max_tokens: Optional[int] = None)
- iterator:用于创建vocab(词汇字典)的可迭代对象。
- min_freq:最小频数。只有在文本中出现频率大于等于min_freq的token才会被保留下来
- specials:特殊标志,字符串列表。用于在词汇字典中添加一些特殊的token/标记,比如最常用的’',用于代表词汇字典中未存在的token,当然也可以用自己喜欢的符号来代替,具体的意义也取决于用的人。
- special_first:表示是否将specials放到字典的最前面,默认是True
- max_tokens:即限制一下这个词汇字典的最大长度。且这个长度包含的specials列表的长度
# 打印词汇表中的内容
print("词典大小:", len(vocab))
print("词典内部映射:", vocab.get_stoi())
text = "这是我的365天深度学习训练营教案"
words = remove_stopwords(jieba.lcut(text))
print("\n")
print("jieba分词后的文本:", jieba.lcut(text))
print("去除停用词后的文本:", remove_stopwords(jieba.lcut(text)))
print("数字化后的文本:",[vocab[word] for word in words])
词典大小: 16
词典内部映射: {‘’: 0, ‘K同学啊’: 2, ‘你’: 5, ‘可以’: 8, ‘我’: 1, ‘博主’: 7, ‘关键字’: 6, ‘365天深度学习训练营’: 3, ‘一个’: 4, ‘微信’: 9, ‘找到’: 10, ‘搜索’: 11, ‘教案’:
12, ‘深度学习’: 13, ‘百度’: 14, ‘通过’: 15}
jieba分词后的文本: [‘这’, ‘是’, ‘我’, ‘的’, ‘365天深度学习训练营’, ‘教案’]
去除停用词后的文本: [‘我’, ‘365天深度学习训练营’, ‘教案’]
数字化后的文本: [1, 3, 12]
个人总结
- 安装torchtext可能出现找不到指定程序的报错,需要降低版本,可能是cuda版本不适配导致