自然语言处理
糯米君_
算法工程师
展开
-
自然语言处理--CountVectorizer入门
CountVectorizer是属于常见的特征数值计算类,是一个文本特征提取方法。对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率。CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数。from sklearn.feature_extraction.text import CountVectorizertexts=["dog cat fish","dog cat cat","fish bird", 'bird'] #原创 2021-03-16 01:09:11 · 567 阅读 · 0 评论 -
自然语言处理--文档集数据处理 gensim corpora.Dictionary
corpora基本概念:corpora是gensim中的一个基本概念,是文档集的表现形式,也是后续进一步处理的基础。从本质上来说,corpora其实是一种格式或者说约定,其实就是一个二维矩阵。在实际运行中,因为单词数量极多(上万甚至10万级别),而一篇文档的单词数是有限的,所以如果还是采用密集矩阵来表示的话,会造成极大的内存浪费,所以gensim内部是用稀疏矩阵的形式来表示的。from gensim import corporafrom collections import defaultdicti原创 2021-03-10 21:19:44 · 704 阅读 · 0 评论 -
自然语言处理--Gensim入门
Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。from gensim import corpora, models, similaritiesfrom gensim.similarities import Similarityimport numpy as nptexts原创 2021-03-10 21:09:49 · 358 阅读 · 0 评论 -
自然语言处理--使用 TensorBoard 可视化词嵌入
TensorBoard 是一个可视化词嵌入的好工具。特别是当训练自己的、基于特定领域的词嵌入时,嵌入可视化可以帮助验证语义相似性。将词模型转换为 TensorBoard 可以处理的格式很简单。将词向量和向量标签加载到 TensorBoard 后,它将执行降维到二维或三维的操作。TensorBoard目前提供 3 种降维方法:PCA、t-SNE 和自定义降维。代码展示了如何将词嵌入转换为 TensorBoard 格式并生成投影数据:import osimport tensorflow.compat.v1原创 2021-03-04 22:12:09 · 591 阅读 · 1 评论 -
自然语言处理--词向量使用基于 Annoy 的高级索引(近似最近邻)来查找最近邻词项
我们可以使用 Annoy 对 word2vec 向量建立索引并将其结果与 gensim 的 KeyedVectors索引进行对比( 像 Annoy 这样的局部敏感哈希使潜在语义索引成为现实):from gensim.models.keyedvectors import KeyedVectorsimport annoyfrom annoy import AnnoyIndex# tqdm()接受一个迭代器并返回一个迭代器(如enumerate()),# 然后在循环中插入代码以显示一个进度条from原创 2021-03-04 22:07:38 · 1257 阅读 · 1 评论 -
自然语言处理--4 种主要的聊天机器人实现方法的利弊
4 种主要的聊天机器人实现方法分别为:生成式对话模型、语义搜索、模式匹配和信息提取(知识库),结合它们可以生成一个看起来非常智能的聊天机器人,构建智能对话引擎。每种方法的优缺点:...原创 2021-02-28 22:46:16 · 647 阅读 · 0 评论 -
自然语言处理--聊天机器人的自然语言流水线
聊天机器人需要 4 个处理阶段和一个数据库来维护过去语句和回复的记录。这 4 个处理阶段中的每个阶段都可以包含一个或多个并行或串行工作的处理算法(如下图)。(1)解析:从自然语言文本中提取特征、结构化数值数据。(2)分析:通过对文本的情感、语法合法度及语义打分,生成和组合特征。(3)生成:使用模板、搜索或语言模型生成可能的回复。(4)执行:根据对话历史和目标,规划相应语句,并选择下一条回复。上述 4 个阶段中的每个阶段都可以使用框图中相应框中列出的一个或多个算法来实现。一个数据库:显式地调用了一原创 2021-02-28 22:17:58 · 512 阅读 · 0 评论 -
自然语言处理--基于示例检索的聊天机器人
一种“倾听”用户的数据驱动方法是在历史对话日志中搜索之前的语句。这类似于人类倾听者尝试回想之前他们在哪里听到过该问题、句子或词。机器人不仅可以搜索自己的对话日志,还可以搜索任何人与人之间的对话记录、机器人和人之间的对话记录,甚至是机器人和机器人之间的对话记录,当然机器人和机器人之间的对话记录慎用。这是基于搜索的聊天机器人,它可以使用历史对话日志来查找和机器人的交谈对象刚刚说的话类似的语句示例。import pandas as pdimport refrom tqdm import tqdmfrom原创 2021-02-28 18:12:42 · 368 阅读 · 2 评论 -
自然语言处理--基于 AIML 的模式匹配聊天机器人
AIML 是一种基于 XML 标准的声明式语言,它规定了可以在机器人中使用的编程构想和数据结构。我们基于人工智能标记语言(AIML)来定义聊天机器人的模式和回复,构建模式匹配聊天机器人。展示如何在聊天机器人中创建和加载 AIML 文件并使用它生成回复:1.greeting_step1.aiml:<?xml version="1.0" encoding="UTF-8"?><aiml version="1.0.1"> <!--在 AIML 1.0 中,所有模式必须全大写-原创 2021-02-28 18:03:46 · 619 阅读 · 0 评论 -
自然语言处理--使用 spaCy 进行词性标注
词性(POS)标注可以使用语言模型来完成,这个语言模型包含词及其所有可能词性组成的字典。然后,该模型可以使用已经正确标注好词性的句子进行训练,从而识别由该字典中其他词组成的新句子中所有词的词性。NLTK 和 spaCy 都具备词性标注功能。我们在这里使用 spaCy,因为它更快、更精确。另外词性标注允许提取一个句子中实体之间的关系。import spacyimport en_core_web_mdfrom spacy.displacy import renderimport pandas as pd原创 2021-02-21 15:47:24 · 4073 阅读 · 2 评论 -
自然语言处理--使用序列到序列网络(编码-解码架构)构建一个简单聊天机器人
聊天机器人用到了编码-解码架构,它的前半部分是序列编码器,该网络将序列(如自然语言文本)转换为较低维的表示形式,编码-解码架构的后半部分是序列解码器。序列解码器设计成将向量重新转换回人类可读的文本。结构图:from nlpia.loaders import get_datafrom tensorflow.compat.v1.keras.layers import CuDNNLSTM as LSTMfrom keras.models import Modelfrom keras.layers im原创 2021-02-09 22:48:07 · 705 阅读 · 0 评论 -
自然语言处理--keras实现堆叠的LSTM(两层LSTM)
两层的LSTM循环神经网络展开结构图:训练堆叠层在计算上代价非常高昂,但在 Keras 中把它们堆叠起来只需几秒,代码如下:from keras.models import Sequentialfrom keras.layers import LSTMmodel = Sequential()# 假如要正确构建模型,需要在第一层和中间层使用参数 return_sequences=True。# 这个要求是有意义的,因为每个时刻的输出都需要作为下一层时刻的输入。model.add(LSTM(nu原创 2021-02-02 00:35:10 · 3830 阅读 · 4 评论 -
自然语言处理--Keras 实现循环神经网络的扩展-门控循环单元GRU
LSTM 是循环神经网络基本概念的一种扩展,同样也存在其他各种形式的扩展。所有这些扩展无外乎都是对元胞内门的数量或运算的一些微调。例如,门控循环单元将遗忘门和候选门中的候选选择分支组合成一个更新门。这个门减少了需要学习的参数数量,并且已经被证实可以与标准 LSTM 相媲美,同时计算开销也要小得多。结构:GRU:有两个输入,两个输出Keras 提供了一个 GRU 层,我们可以像使用 LSTM一样使用它,如代码:from keras.models import Sequentialfrom kera原创 2021-02-02 00:29:43 · 409 阅读 · 0 评论 -
自然语言处理--Keras 实现LSTM生成文本
令人兴奋的是,基于上一篇《keras实现LSTM字符级建模》的原理,使用LSTM我们可以根据之前文档出现过的字符来预测下一个字符,并且根据训练数据文本的特定的“风格”或“看法”生成新的文本。这很有趣,但我们将选择一个风格独特的人——威廉·莎士比亚(William Shakespeare),现根据他现有的作品来生成乍一看都有点儿像莎士比亚的作品的文本。from nltk.corpus import gutenbergfrom keras.models import Sequentialfrom kera原创 2021-02-02 00:24:46 · 996 阅读 · 0 评论 -
自然语言处理--keras实现LSTM字符级建模
词是有含义的,在对语言建模时,许多含义隐藏在字符里面。语音语调、头韵、韵律—如果我们把它们分解到字符级别,可以对所有这些建模。人类不需要分解得如此细致就可以为语言建模。但是,从建模中产生的定义非常复杂,并不容易传授给机器,这就是我们讨论这个问题的原因。对于我们见过的字符,当我们查看文本中哪个字符出现在哪个字符后面时,可以发现文本中的许多固有的模式。在这个范式中,空格、逗号或句号都变成了另一个字符。现让我们在 IMDB 电影评论数据集中,在字符级别上尝试 LSTM:import numpy as npi原创 2021-02-02 00:09:55 · 274 阅读 · 0 评论 -
自然语言处理--Keras 实现LSTM循环神经网络分类 IMDB 电影评论数据集
LSTM 对于循环网络的每一层都引入了状态(state)的概念,状态作为网络的记忆(memory)。但什么是记忆呢?记忆将由一个向量来表示,这个向量与元胞中神经元的元素数量相同。记忆单元将是一个由 n个元素长的浮点数(float)向量。LSTM循环神经网络展开后的结构:其中某个时刻LSTM单元的结构:包含3 个门:遗忘门、输入/候选门和输出门有了 LSTM,模型可以开始学习人类习以为常和在潜意识层面上处理的语言模式。有了这些模式,我们不仅可以更精确地预测样本类别,还可以开始使用这些语言模式生成新原创 2021-02-01 23:58:07 · 1598 阅读 · 1 评论 -
自然语言处理--创建一个双向循环神经网络
我们阅读句子的方向是单向的,但当接收到新信息时,大脑能够迅速回到文本前面的内容。人类可以处理那些没有按照最佳顺序呈现的信息。如果我们能允许模型在输入之间来回切换,那就太好了。这就是双向循环神经网络的用武之地。基本思想:将两个 RNN 并排在一起,将输入像普通单向 RNN 的输入一样传递到其中一个 RNN 中,并将同样的输入从反向传递到另一个 RNN 中,如图所示,然后,在每个时刻将这两个网络的输出拼接到一起作为另一个网络中对应(相同输入词条)时刻的输入。我们获取输入最后一个时刻的输出后,将其与在反向网络的原创 2021-01-28 22:26:25 · 202 阅读 · 0 评论 -
自然语言处理--Keras 实现循环神经网络分类 IMDB 电影评论数据集
那么为什么要使用 RNN 呢?不一定要选择循环神经网络,与前馈网络或卷积神经网络相比,它训练和传递新样本的成本相对较高(循环层计算成本较高)。但是循环网络在记忆能力方面的特殊优势即记住句子中出现过的词,这是进入包括 NLP 或所有其他序列数据的更大世界的起点。结构:import numpy as npimport globimport osfrom random import shufflefrom nltk.tokenize import TreebankWordTokenizerfro原创 2021-01-28 22:20:05 · 749 阅读 · 0 评论 -
自然语言处理--keras实现一维卷积网络对IMDB 电影评论数据集构建情感分类器
为什么在 NLP 分类任务中选择 CNN 呢?1.CNN神经网络可以像处理图像一样处理文本并“理解”它们2.主要好处是高效率3.在许多方面,由于池化层和卷积核大小所造成的限制(虽然可以将卷积核设置得更大),会导致丢弃信息,但这并不意味着它们不是有用的模型。利用 CNN 能够有效地对相对较大的数据集进行检测和预测情感4.即使依赖 Word2vec 词嵌入,CNN 也可以在不映射整个语言的条件下,通过较少的词嵌入表示来运行import numpy as np# 处理填充输入数据的辅助模块from原创 2021-01-24 18:30:32 · 906 阅读 · 2 评论 -
自然语言处理--利用 Doc2vec 计算文档向量
与训练词向量类似,可以使用 gensim 包来训练文档向量。import multiprocessing# gensim Doc2vec 模块为语料库中的每篇文档包含了词向量嵌入和文档向量from gensim.models.doc2vec import TaggedDocument, Doc2Vec# gensim的simple_preprocess 单元是一个粗分词器,会去除单字母词和所有标点符号from gensim.utils import simple_preprocess# 统计C原创 2021-01-21 23:52:41 · 800 阅读 · 0 评论 -
自然语言处理--在二维平面上语义词关系可视化(绘制反映词向量关系的散点图)
语义词之间的关系非常有用,通过可视化可以得到一些有趣的发现。通过美国城市名称的 Word2vec 向量之间的距离将它们绘制在二维语义图上,即将Word2vec 距离映射到二维平面上,然后会发现在训练googlenews-vectors-negative300.bin.gz的谷歌新闻语料库中,一些大小和文化相似的城市尽管在地理位置上相距甚远,但在语义上却紧密地聚合在一起。import osfrom nlpia.loaders import get_datafrom gensim.models.keye原创 2021-01-21 23:49:08 · 1085 阅读 · 0 评论 -
自然语言处理--加载使用facebook的预训练 fastText 模型wiki-news-300d-1M.vec
fastText,与 Word2vec 中预测周围词不同,该算法预测周围的 n 个字符。例如,“whisper”将生成以下两字符的 gram 和 3 字符的 gram:wh, whi, hi, his, is, isp, sp, spe, pe, per, erfastText 为每个 n 字符的 gram 训练一个向量表示,其中包括词、拼错的词、词片段,甚至单个字符。这种方法比原来的 Word2vec 能够更好地处理罕见词。# # .bin文件# from gensim.models.fastte原创 2021-01-21 23:36:16 · 1345 阅读 · 0 评论 -
自然语言处理--训练面向特定领域的 Word2vec 模型
在某些情况下,需要创建面向特定领域的词向量模型。由于谷歌训练 googlenews-vectors-negative300.bin.gz模型时使用的是 2006 年之前的谷歌新闻,所以如果 NLP 流水线处理的文本中词的用法在当时的谷歌新闻中找不到,那么可以通过定制化词向量来提高模型的精确率。另外,如果有些词在谷歌新闻中很罕见,或者这些词在特定领域有一些特定用法,如医学文本或成绩单等,那么面向特定领域的词向量模型也可以提高模型精确率。现在展示如何训练定制化的Word2vec 模型。from gensim原创 2021-01-21 23:28:36 · 496 阅读 · 0 评论 -
自然语言处理--gensim.word2vec 模块加载使用谷歌的预训练模型googlenews-vectors-negative300.bin.gz
词向量将词的语义表示为训练语料库中上下文中的向量,可以把词向量看作是一个权重或分数的列表,列表中的每个权重或分数都对应于这个词在某个特定维度的含义。很多公司都提供了预训练好的词向量模型,而且有很多针对各种编程语言的 NLP 库,可以让大家方便地使用这些预训练模型。如:谷歌公司的googlenews-vectors-negative300.bin.gzfrom nlpia.data.loaders import get_datafrom gensim.models.keyedvectors import原创 2021-01-21 23:22:13 · 4878 阅读 · 2 评论 -
自然语言处理--keras构建神经网络实现异或问题(非线性)
Keras 是一个高级封装器,封装了面向 Python 的 API。API 接口可以与 3 个不同的后端库相兼容:Theano、谷歌的 TensorFlow 和微软的 CNTK。这几个库都在底层实现了基本的神经网络单元和高度优化的线性代数库,可以用于处理点积,以支持高效的神经网络矩阵乘法运算。基本感知机有一个固有缺陷,那就是,如果数据不是线性可分的,或者数据之间的关系不能用线性关系来描述,模型将无法收敛,也将不具有任何有效预测的能力,因为它无法准确地预测目标变量。现在我们使用神经网络来解决异或问题,它的原创 2021-01-16 15:22:30 · 547 阅读 · 0 评论 -
自然语言处理--感知机实现逻辑或问题(线性)
通过仅向计算机展示一些标记样本来教它学会或问题。逻辑或(OR):如果一个表达式的一边或另一边为真(或两边都为真),则逻辑或语句的结果为真。from random import randomimport numpy as npsample_data = [[0, 0], # False, False [0, 1], # False, True [1, 0], # True, False [1, 1]] #原创 2021-01-16 15:16:22 · 418 阅读 · 0 评论 -
自然语言处理--人工构建感知机(神经单元)
感知机结构如图:现在用python代码实现它:import numpy as npexample_input = [1, .2, .1, .05, .2]example_weights = [.2, .12, .4, .6, .90]input_vector = np.array(example_input)weights = np.array(example_weights)bias_weight = .2# 这里bias_weight * 1只是为了强调bias_weight和其他原创 2021-01-16 15:12:02 · 179 阅读 · 1 评论 -
自然语言处理--PCA+LDA构建垃圾消息过滤器
PCA和 LDA 结合起来有助于创建一个精确的、泛化能力强的短消息分类模型,这样面对新的短消息时出错概率大幅降低:import numpy as npimport pandas as pdfrom nlpia.data.loaders import get_datafrom nltk.tokenize.casual import casual_tokenizefrom sklearn.model_selection import train_test_splitfrom sklearn.disc原创 2021-01-11 00:02:53 · 494 阅读 · 1 评论 -
自然语言处理--sklearn计算特征向量之间距离的可用方法
特征向量(词向量、主题向量、文档上下文向量等)之间的距离驱动着 NLP 流水线或任何机器学习流水线的性能。'cityblock', 'cosine', 'euclidean', 'l1', 'l2', 'manhattan', 'braycurtis', 'canberra', 'chebyshev', 'correlation', 'dice', 'hamming', 'jaccard', 'kulsinski', 'mahalanobis', 'matching', 'minkowski', '原创 2021-01-11 00:02:30 · 1082 阅读 · 0 评论 -
自然语言处理--LDiA+LDA构建垃圾消息过滤器
LDiA 擅长挖掘可解释的主题,如用于摘要的主题,而且在产生对线性分类有用的主题方面 LDiA 也不差。下面我们看看这些 LDiA 主题在预测(如消息的垃圾性)时的有效性。使用 LDiA主题向量来训练 LDA 模型:from sklearn.feature_extraction.text import CountVectorizerfrom nltk.tokenize import casual_tokenizeimport numpy as npimport pandas as pdfrom原创 2021-01-10 19:36:31 · 715 阅读 · 0 评论 -
自然语言处理--基于 LDiA 主题模型的短消息语义分析:提取主题向量
当需要计算可解释的主题向量时,请使用 LDiA:在为消息分配主题时,会出现很多 0,因此主题之间分隔得更加清晰。LDiA 假设每篇文档都由某个任意数量的主题混合(线性组合)而成,该数量是在开始训练LDiA 模型时选择的。LDiA 还假设每个主题都可以用词的分布(词项频率)来表示。文档中每个主题的概率或权重,以及某个词被分配到一个主题的概率,都假定一开始满足狄利克雷概率分布。from sklearn.feature_extraction.text import CountVectorizerfrom n原创 2021-01-10 19:31:44 · 1205 阅读 · 1 评论 -
自然语言处理--向量之间点积看基于TruncatedSVD 的垃圾短消息分类的效果
要了解向量空间模型在分类方面的效果如何,一种方法是查看类别内部向量之间的余弦相似度与它们的类别归属之间的关系。我们应该会看到,任何垃圾短消息(“sms2!”)之间的正的余弦相似度(点积)更大:import pandas as pdfrom nlpia.data.loaders import get_datafrom sklearn.feature_extraction.text import TfidfVectorizerfrom nltk.tokenize.casual import casua原创 2021-01-10 19:25:21 · 205 阅读 · 0 评论 -
自然语言处理--基于截断的 SVD (TruncatedSVD)的短消息语义分析:提取主题向量
它可以处理稀疏矩阵,所以如果我们正在处理大规模数据集,那么无论如何都要使用TruncatedSVD而非 PCA。TruncatedSVD 的 SVD 部分将 TF-IDF 矩阵分解为 3 个矩阵,其截断部分将丢弃包含 TF-IDF 矩阵最少信息的维度。这些被丢弃的维度表示文档集中变化最小的主题(词的线性组合),它们可能对语料库的总体语义没有意义。它们可能会包含许多停用词和其他词,这些词在所有文档中均匀分布。使用 TruncatedSVD 仅仅保留 16 个主题,这些主题在 TF-IDF 向量中所占的方差原创 2021-01-10 19:19:29 · 1392 阅读 · 0 评论 -
自然语言处理--基于 PCA 的短消息语义分析:提取主题向量
降维是针对过拟合的主要应对措施。通过将多维度(词)合并到更少的维度(主题)中,我们的 NLP 流水线将变得更加通用。泛化 NLP 流水线有助于确保它适用于更广泛的现实世界的短消息集,而不仅仅是这一组特定的消息集。scikit-learn 中的 PCA 模型把数据集 9232 维的 TF-IDF 向量转换为 16 维主题向量:import pandas as pdfrom nlpia.data.loaders import get_datafrom sklearn.feature_extraction原创 2021-01-10 19:15:23 · 472 阅读 · 0 评论 -
自然语言处理--PCA将三维“马“向量降为二维
三维马的二维投影:import pandas as pdfrom sklearn.decomposition import PCAimport seabornfrom matplotlib import pyplot as pltfrom nlpia.data.loaders import get_datapd.set_option('display.max_columns', 6)# 点云数据df = get_data('pointcloud').sample(1000)pca = P原创 2021-01-10 19:08:06 · 1006 阅读 · 0 评论 -
自然语言处理--奇异值分解(截断)
奇异值分解是 LSA(潜在语义分析)即计算主题向量背后的算法。SVD 是一种可以将任何矩阵分解成 3 个因子矩阵的算法,而这 3 个因子矩阵可以相乘来重建原始矩阵。这类似于为一个大整数找到恰好 3 个整数因子,但是这里的因子不是标量整数,而是具有特殊性质的二维实矩阵。通过 SVD 计算出的 3 个因子矩阵具有一些有用的数学性质,这些性质可以用于降维和 LSA。用代码来实现SVD的矩阵分解:from nlpia.book.examples.ch04_catdog_lsa_sorted import ls原创 2021-01-10 19:03:38 · 1540 阅读 · 3 评论 -
自然语言处理--短消息二元分类LDA 模型:垃圾消息过滤器(原理实现)
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。下面,我们给出了 LDA 的一个简单的实现版本,模型训练有 3 个步骤:(1)计算某个类(如垃圾短消息类)中所有 TF-IDF 向量的平均位置(质心)。(2原创 2021-01-10 18:57:12 · 571 阅读 · 1 评论 -
自然语言处理--nlp研究难点
NLP是人工智能(AI)的一个子领域,全称为Natural Language Processing,在人机交互方式上有一定优势,不过目前也存在一些研究难点,比如:(1)单词的边界界定(2)词义的消歧(3)句法的模糊性(4)有瑕疵的或不规范的输入(5)语言行为与计划等...原创 2021-01-10 18:47:04 · 1130 阅读 · 1 评论 -
自然语言处理--人工计算主题向量
假设有一篇特定文档的 TF-IDF 向量,我们想将其转换为主题向量。设想一下每个词对文档的主题的贡献度有多大。假设我们正在处理一些有关纽约中央公园(NYC)中宠物的句子。我们创建 3 个主题:一个与宠物有关,一个与动物有关,另一个则与城市有关。我们可以把这些主题分别称为“petness” “animalness”和“cityness”。因此,“petness”主题会给“cat”和“dog”这样的词打高分,但很可能会忽略“NYC”和“apple”这样的词。而“cityness”这个主题则会忽略“cat”和“原创 2021-01-10 18:44:12 · 322 阅读 · 0 评论 -
自然语言处理--基于tf-idf和余弦相似度构建关键词搜索引擎(处理三篇文档)
关键词搜索引擎:将搜索查询本身视为文档,从而获得它的基于 TF-IDF 的向量表示。然后找到与查询余弦相似度最高的向量的文档,并将这些文档作为搜索结果返回。我们的语料库由3 篇文档组成,而查询是“How long does it take to get to the store?”,如下代码所示:from collections import OrderedDictimport copyfrom collections import Counterfrom nltk.tokenize import原创 2020-12-27 22:39:34 · 435 阅读 · 0 评论