Skip to content

常用库

  1. Pandas:
    • 作用: 用于数据分析和处理,提供了数据结构和数据分析工具,尤其适用于处理结构化数据(如表格数据)。
    • 功能: 数据清洗、数据转换、数据分析、数据可视化、数据操作等。
  2. Matplotlib:
    • 作用: 用于绘制各种静态、交互式和动态的数据可视化图表。
    • 功能: 绘制折线图、柱状图、散点图、饼图、箱线图等。
  3. Seaborn:
    • 作用: 用于创建统计图形,可以提高Matplotlib图表的美观度和信息表达性。
    • 功能: 绘制更复杂、更具吸引力的统计图表,如热力图、分布图、分类散点图等。
  4. re (正则表达式):
    • 作用: 用于文本匹配、搜索和处理,支持通过模式描述匹配规则。
    • 功能: 匹配字符串、替换字符串、提取信息等。
  5. jieba:
    • 作用: 用于中文分词,将中文文本按词语进行切分。
    • 功能: 分词、词频统计、关键词提取等。
  6. wordcloud:
    • 作用: 用于生成词云图,展示文本中词语的重要程度或频率。
    • 功能: 根据文本中词语的频率或权重生成词云图。
  7. gensim:
    • 作用: 用于文本建模和主题建模,特别是在自然语言处理中使用。
    • 功能: 提供工具和算法用于文本向量化、词向量训练、主题模型构建等。
  8. snownlp:
    • 作用: 用于处理中文文本情感分析。
    • 功能: 提供情感分析、分词、标注等功能,尤其是针对中文文本的情感分析。

jieba

jieba.lcut:

  • 分词粒度:与 jieba.cut 类似,分词粒度较粗。

  • 适用场景:一般用于普通文本分词,返回一个包含分词结果的列表。

  • 示例:

    pythonCopy codeimport jieba
    
    text = "我喜欢学习自然语言处理"
    result = jieba.lcut(text)
    print(result)  # 输出:['我', '喜欢', '学习', '自然语言处理']

jieba.cut:

  • 分词粒度:分词粒度较粗,适用于普通文本分词。

  • 适用场景:一般用于普通文本分词,返回一个生成器对象,需要迭代获取分词结果。

  • 示例:

    pythonCopy codeimport jieba
    
    text = "我喜欢学习自然语言处理"
    result = jieba.cut(text)
    print(list(result))  # 输出:['我', '喜欢', '学习', '自然语言处理']

jieba.cut_for_search:

  • 分词粒度:分词粒度较细,适用于搜索引擎等需要更细粒度分词的场景。

  • 适用场景:用于搜索引擎等需要更细粒度分词的场景,返回一个生成器对象,需要迭代获取分词结果。

  • 示例:

    pythonCopy codeimport jieba
    
    text = "我喜欢学习自然语言处理"
    result = jieba.cut_for_search(text)
    print(list(result))  # 输出:['我', '喜欢', '学习', '自然', '语言', '自然语言', '处理']

jieba.cut(sent, cut_all=True):

  • 分词粒度:分词粒度最细,尝试切分所有可能的词语。

  • 适用场景:不常用,用于分词粒度最细的全模式,通常会导致大量的冗余分词结果。

  • 示例:

    pythonCopy codeimport jieba
    
    text = "我喜欢学习自然语言处理"
    result = jieba.cut(text, cut_all=True)
    print(list(result))  # 输出:['我', '喜欢', '学习', '自然', '自然语言', '语言', '处理

jieba.load_userdict('./data/user_dict.utf8')

加载用户自定义词典,以丰富分词库中的词汇,让分词器能够识别用户自定义的词语。这不会改变词语的权重,只是增加了分词器的词汇库。

aly.set_idf_path('./data/idf.txt.big')

主要用于自定义 IDF 文件,以影响分词结果中词语的权重。

aly.set_stop_words('./data/stop_words.utf8')

aly.set_stop_words('./stop_words.utf8') 这行代码的作用是设置停用词文件,指定了一个名为 "stop_words.utf8" 的文件作为停用词表。该文件内容应该包含要过滤掉的停用词,每个词汇占一行。

提取关键词

提取关键词会自动忽略特殊符号

aly.extract_tags(text, topK=5, withWeight=True, allowPOS=('n', 'v'))

  • text:表示要提取关键词的文本。
  • topK=5:表示提取的关键词数量,这里设置为提取前 5 个关键词。
  • withWeight=True:表示同时返回关键词的权重。权重是基于 TF-IDF 算法计算的关键词重要性指标。
  • allowPOS=('n', 'v'):表示允许的词性。这里设置为只允许名词(n)和动词(v)作为关键词的词性。

文本中提取了前五个关键词,这些关键词根据 TF-IDF 算法的分数进行排序。自动识别文本中的重要词汇,通常用于文本摘要、关键词提取、主题分析等自然语言处理任务中。

aly.textrank(text, topK=5)

基于 TextRank 算法,自动分析文本中词语之间的关联关系,然后根据关联度来评估词语的重要性。

re 正则匹配库

re.match() 函数在字符串的开头进行匹配,只有当模式与字符串的开头完全匹配时才返回匹配对象。而 re.search() 函数则在整个字符串中搜索模式,返回第一个匹配项的匹配对象。

match

re.match() 函数来尝试在 text1 字符串的开头匹配模式 '自然语言处理'。由于模式与字符串的开头完全匹配,因此返回一个匹配对象 <re.Match object; span=(0, 5), match='自然语言处理'>

使用 re.match() 函数来尝试在 text1 字符串的开头匹配模式 '语言处理'。由于模式不与字符串的开头完全匹配,因此返回 None

使用 re.search() 函数来在 text1 字符串中搜索模式 '语言处理'。由于模式在字符串中出现,返回一个匹配对象 <re.Match object; span=(3, 8), match='语言处理'>,表示模式在字符位置 3 到 8 之间匹配成功。

findall

re.findall('计算机', text1),将返回一个列表,其中包含在 text1 中找到的所有与模式 '计算机' 匹配的子字符串。

sub

re.sub('自然语言处理', 'NLP', text1),将对 text1 中的匹配项 '自然语言处理' 进行替换。将替换为 'NLP'

r

r 是一个前缀,表示原始字符串(raw string)。使用原始字符串,可以确保反斜杠 \ 不会被解释为特殊字符。

当使用正则表达式时,某些字符具有特殊意义,例如 \n 表示换行符,\t 表示制表符等。如果想要匹配这些特殊字符本身而不是它们的特殊含义,可以在正则表达式模式的前面添加 r 前缀,使其成为原始字符串。

例如,考虑以下正则表达式模式:

python
pattern = r"\d+"
python
print(re.findall(r'\b[a-zA-Z]+', text2))

这行代码使用了 re.findall() 函数来在 text2 字符串中找到所有由英文字母组成的单词。

具体解释如下:

  • \b 是一个正则表达式的元字符,表示单词的边界。它用于匹配单词的开头或结尾,确保我们只匹配完整的单词而不是单词的一部分。
  • [a-zA-Z] 是一个字符类,表示匹配任意一个英文字母(大小写不限)。
  • + 是一个量词,表示匹配前面的字符或字符类一次或多次。
  • re.findall() 函数将返回所有匹配到的结果,以列表的形式进行返回。

Pandas

iloc

Pandas DataFrame对象的一个属性,用于基于整数位置对数据进行选择和切片。iloc 允许你通过行和列的整数位置来访问数据,而不是使用标签或索引。

语法如下:

python
df.iloc[行位置, 列位置]

其中,行位置和列位置可以是单个整数、整数切片或整数列表,用于选择相应的行和列。

以下是一些示例用法:

  1. 选择单个元素:

    python
    df.iloc[0, 1]  # 选择第0行第1列的元素
  2. 选择整行:

    python
    df.iloc[1]  # 选择第1行的所有列
  3. 选择整列:

    python
    df.iloc[:, 2]  # 选择第2列的所有行
  4. 切片多行和多列:

    python
    df.iloc[1:3, 0:2]  # 选择第1行到第2行和第0列到第1列的数据
  5. 选择指定行和列的位置:

    python
    df.iloc[[0, 2], [1, 3]]  # 选择第0行和第2行以及第1列和第3列的数据

字段重命名

python
df = df.rename(columns={'新': '旧', '新1': '旧1'})

read_csv

python
df = pd.read_csv('test.txt', header=None)
header = None 时第一行为主体内容,不加时默认第一行为标题

Gensim

通常,我们要处理的原生语料是一堆文档的集合,每一篇文档又是一些原生字符的集合。在交给Gensim的模型训练之前,我们需要将这些原生字符解析成Gensim能处理的稀疏向量的格式。由于语言和应用的多样性,我们需要先对原始的文本进行分词、去除停用词等操作,得到每一篇文档的特征列表。例如,在词袋模型中,文档的特征就是其包含的word:

text
texts = [['human', 'interface', 'computer'],
['survey', 'user', 'computer', 'system', 'response', 'time'],
['eps', 'user', 'interface', 'system'],
['system', 'human', 'system', 'eps'],
['user', 'response', 'time'],
['trees'],
['graph', 'trees'],
['graph', 'minors', 'trees'],
['graph', 'minors', 'survey']]

其中,corpus的每一个元素对应一篇文档。

例:

python
documents = ['世界那么大我想去河南周口看看周口', '身在周口的宝宝恭喜了',
             '2岁宝宝坠楼,他们接住了!', 'A县发现3例新冠肺炎无症状感染者']
texts = [[word for word in list(jieba.cut(document)) if word not in stopwords] for document in documents]  # 分词、去停用词
print(texts)

[['世界', '想', '河南', '周口', '看看', '周口'], ['身在', '周口', '宝宝', '恭喜'], ['岁', '宝宝', '坠楼', '接住'], ['A', '县', '发现', '例新冠', '肺炎', '无症状', '感染者']]

接下来,我们可以调用Gensim提供的API建立语料特征(此处即是word)的索引字典,并将文本特征的原始表达转化成词袋模型对应的稀疏向量的表达。依然以词袋模型为例:

python
from gensim import corpora
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
print corpus[0] # [(0, 1), (1, 1), (2, 1)]

dictionary 词典

python
dictionary = corpora.Dictionary(texts)  # 加载语料,生成字典
print(dictionary)

Dictionary<18 unique tokens: ['世界', '周口', '想', '河南', '看看']...>

词典即包含不重复的全部词,是将原始文本中的词语映射到唯一标识符的数据结构。它创建了词语到数字之间的对应关系,这些数字可以用于进一步的分析和处理。词典将每个词映射到一个唯一的ID,这样可以在模型训练和其他处理中使用数字而不是字符串。

查看每个词对应的 ID

python
for key, value in dictionary.items():
    print(key, value)

0 世界
1 周口
2
3 河南
4 看看
5 宝宝

词袋模型

python
corpus = [dictionary.doc2bow(text) for text in texts]

[[(0, 1), (1, 2), (2, 1), (3, 1), (4, 1)], [(1, 1), (5, 1), (6, 1), (7, 1)], [(5, 1), (8, 1), (9, 1), (10, 1)], [(11, 1), (12, 1), (13, 1), (14, 1), (15, 1), (16, 1), (17, 1)]]

corpus = [dictionary.doc2bow(text) for text in texts] 这行代码的作用是将文本数据(texts)转换为一种称为词袋模型(Bag of Words, BoW)的数值化表示形式。

  • texts: 这是分词后的文本数据,每个文本被表示为一个词语列表。
  • dictionary.doc2bow(text): 这是用词典(dictionary)将分词后的文本转换为词袋模型的过程。doc2bow 方法将文本转换为一种简单的数值表示,其中每个词语都与一个唯一的整数 ID 相关联,并且与词语在文本中出现的次数一起被记录。
  • corpus = [...]: 这部分将处理后的文本数据转换为一个称为语料库(corpus)的集合,其中每个文本都用词袋模型表示。

每个文本经过 dictionary.doc2bow(text) 处理后,会得到一个由元组组成的列表,每个元组包含两个值:词语的唯一整数 ID 和该词语在文本中的出现次数。这个过程可以被看作将文本量化到一个数值化的表示。

Released under the MIT License.