JueLuo's Blog


  • Home

  • Categories

  • Archives

  • Tags

  • Search

关于 Jekyll 编译通过但文章未显示的思考

Posted on 2021-12-21 | In Jekyll

昨日的文章 push 到 GitHub 后,打开 GitHub Pages 页面,发现新的文章并没有展示,故开始思考其未能正常展示的原因

首先想到的是,是不是 Jekyll 编译失败了?检查邮箱,未收到编译失败的提示邮件,检查 GitHub Actions 页面,也提示编译通过

然后检查了文件名和文件编码,文件名格式正确,编码也是 UTF-8,没有问题

最后通过翻阅 GitHub Actions 的 log,在 build 这个 job 的 Build page with Jekyll 中发现了这么一行内容:Skipping: _posts/2021-12-20-python-flask-mysql.md has a future date

这应该是由于时区不同导致的,但为何以前的 post 均没有出现该问题呢?

Read more »

在 flask 中使用 flask-mysql 连接数据库

Posted on 2021-12-20 | In Python

最初尝试了 pymysql + flask 的方式连接数据库,但是发现会出现超时等各种问题,经 Stack Overflow 的一个帖子提示,可以使用 flask-mysql 来更方便地连接数据库

项目地址

GitHub:https://github.com/cyberdelia/flask-mysql 官方文档:https://flask-mysql.readthedocs.io/en/latest/

安装

1
pip install flask-mysql

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from flask import Flask
from flaskext.mysql import MySQL

app = Flask(__name__)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'EmpData'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)

conn = mysql.connect()

@app.route('/')
def foo():
    with conn.cursor() as cursor:
        cursor.execute('SELECT * FROM employees')
        return str(cursor.fetchall())
Read more »

修复 Ubuntu 上 Firefox 中文显示不正确的问题

Posted on 2021-12-13 | In Linux

我使用的是 Ubuntu Server 20.04 LTS,在安装 Firefox 后,通过 X server 启动 Firefox,发现中文字体显示不正确

执行以下命令后,重启 Firefox。即可解决问题

1
2
3
sudo apt-get install ttf-wqy-microhei  #文泉驿-微米黑
sudo apt-get install ttf-wqy-zenhei  #文泉驿-正黑
sudo apt-get install xfonts-wqy #文泉驿-点阵宋体
Read more »

Python 创建虚拟环境的几种方法

Posted on 2021-12-07 | In Python

本文简单记录、比较了自己使用过的几种 Python 虚拟环境工具,并提供了一些常用的命令

对比

下表中的内容仅保证在本文写作时(Python 3.10)的准确性,请自行检查内容是否过期

名称 内建标准库 Python 版本隔离
venv ✔️ ❌
virtualenv ❌ ❌
conda ❌ ✔️
pyvenv 已弃用 -

还有其他同样优秀、功能各异的虚拟环境工具,本文未做详细介绍:

  • pyenv/pyenv: Simple Python version management
  • pyenv/pyenv-virtualenv: a pyenv plugin to manage virtualenv (a.k.a. python-virtualenv)
  • pyenv/pyenv-virtualenvwrapper: an alternative approach to manage virtualenvs from pyenv.
  • virtualenvwrapper · PyPI
  • pipenv · PyPI

venv

安装

在 Python 3.3 及以后的版本中,venv 被包含在 Python 标准库中,不需要额外的安装步骤

创建

通常都创建在项目下的 venv 目录中(如果项目中有多个 Python 版本,可以创建多个 venv 目录)

Windows

1
> python -m venv venv

Linux

1
$ python3 -m venv venv

使用

Windows (cmd)

1
> .\venv\Scripts\activate.bat

Linux

1
$ source ./venv/bin/activate

退出

Windows (cmd)

1
> .\venv\Scripts\deactivate.bat

Linux

1
$ deactivate

删除

移除 venv 目录即可

virtualenv

virtualenv is a tool to create isolated Python environments. Since Python 3.3, a subset of it has been integrated into the standard library under the venv module. The venv module does not offer all features of this library, to name just a few more prominent:

  • is slower (by not having the app-data seed method),
  • is not as extendable,
  • cannot create virtual environments for arbitrarily installed python versions (and automatically discover these),
  • is not upgrade-able via pip,
  • does not have as rich programmatic API (describe virtual environments without creating them).

操作方式与上文介绍的 venv 基本一致,但命令行工具名称不同

安装

1
pip install --user virtualenv

创建

1
virtualenv venv

这将创建一个与 virtualenv 版本相同的 python 虚拟环境到子目录 venv 中

使用、退出与删除

与上文的 venv 完全相同

conda

安装

Download Anaconda

Download Miniconda

简单使用

功能 命令
创建环境 conda create --name $ENVIRONMENT_NAME
创建指定版本的环境 conda create --name $ENVIRONMENT_NAME python=2.7
激活环境 conda activate $ENVIRONMENT_NAME
退出环境 conda deactivate
安装一个包(激活环境后) conda install $PACKAGE_NAME
升级一个包(激活环境后) conda update $PACKAGE_NAME
卸载一个包(激活环境后) conda remove $PACKAGE_NAME
列出所有可用环境 conda env list
删除一个环境 conda env remove --name $ENVIRONMENT_NAME
   

更多用法可参考官方文档:Managing conda

pyvenv

该模块已在 Python 3.6 中被弃用

参考资料

  1. python - What is the difference between venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc? - Stack Overflow
  2. venv — Creation of virtual environments — Python 3.10.0 documentation
Read more »

麦克风输入音量太小的一个解决办法

Posted on 2021-12-02 | In 工具 , Windows

适用环境

调整麦克风音量、音量增强后麦克风输入音量仍然较小,或没有音量增强选项的情况

所需工具

Equalizer APO https://sourceforge.net/projects/equalizerapo/ Peace Equalizer, interface Equalizer APO https://sourceforge.net/projects/peace-equalizer-apo-extension/

Read more »

自然语言处理的知识点框架图

Posted on 2021-11-29 | In AI

自然语言处理的知识点框架图

自然语言应用

(按技术层面划分)

基础技术

  • 词法分析
  • 句法分析
  • 命名实体识别
  • 语义分析
  • 篇章分析
  • 语言模型
  • 词性标注

核心技术

  • 机器翻译

    • BLEU 得分
  • 文本摘要
  • 文本分类
  • 阅读理解
  • 文本生成
  • 情感分析

    • 基于词典的情感分析方法
    • 基于机器学习的情感分析方法
    • 分析的对象和结果

      • 文本

        • 句子
        • 段落
        • 文档
      • 情绪

        • 正面
        • 负面
  • 智能问答

    • 按答案生成方式分类分类

      • 检索式问答系统
      • 生成式问答系统
    • 按求解问题分类

      • 事实型问题
      • 列表型问题
      • 定义型问题
      • 关系型问题
      • 观点型问题

应用

  • 智能客服
  • 搜索引擎
  • 个人助理
  • 推荐系统
  • 舆情分析
  • 知识图谱

Python 适用的常见 NLP 工具

中文综合 NLP 工具包

  • THULAC

  • LTP

  • BaiduLac

  • HanLP

  • FastNLP

  • SnowNLP

  • Tony-Wang/YaYaNLP

  • SeanLee97/小明NLP

  • rockingdingo/DeepNLP

  • smilelight/lightNLP

  • deepwel/Chinese-Annotator

  • taozhijiang/chinese_nlp

  • rockyzhengwu/FoolNLTK

  • smoothnlp/SmoothNLP

  • synyi/poplar

  • ownthink/Jiagu

英语或多语言综合 NLP 工具包

  • stanfordnlp/stanza

  • NLTK

  • spaCy

  • BrikerMan/Kashgari

  • chartbeat-labs/textacy

  • RaRe-Technologies/gensim

中文分词

  • Jieba 结巴中文分词

  • 北大中文分词工具

  • kcws 深度学习中文分词

  • hankcs/ID-CNN-CWS

  • Genius 中文分词

  • loso 中文分词

  • “哑哈”中文分词

  • Moonshile/ChineseWordSegmentation

信息提取

问答和聊天机器人

中文语料库

  • 开放知识图谱OpenKG.cn

  • 开放中文知识图谱的schema

  • 大规模中文概念图谱CN-Probase

  • ownthink / 1.4亿中文知识图谱开源下载

  • 农业知识图谱

  • 中文 Wikipedia Dump

  • 基于不同语料、不同模型(比如BERT、GPT)的中文预训练模型

  • OpenCLaP 多领域开源中文预训练语言模型仓库

  • to-shimo/chinese-word2vec

  • Embedding/上百种预训练中文词向量

  • 腾讯 AI - 超过 800 万个中文单词短语提供 200 维向量表示

  • 中文预训练BERT with Whole Word Masking

  • 中文 GPT2 训练代码

  • 中文语言理解测评基准 ChineseGLUE

  • 中华新华字典数据库(歇后语、汉字、词语、成语)

  • Synonyms 中文近义词工具包

  • dgk_lost_conv 中文对白语料

  • 中文突发事件语料库

  • PTT 八卦版問答中文語料(繁体)

  • 中文公开聊天语料库

  • 中国股市公告信息爬取

  • tushare 财经数据接口

  • SmoothNLP 金融文本数据集

  • 保险行业语料库

  • 中华古诗词数据库

  • DuReader Machine Reading Comprehension

  • 中文语料小数据

  • 中国文学文本的话语级命名实体识别和关系提取数据集

  • 中文文本推断项目

  • 大规模中文自然语言处理语料

  • 中文人名语料库

  • 中文敏感词词库

  • 中文简称词库

  • 公司名语料库

  • 中文实体情感知识库

  • 漢語拆字字典(繁体)

  • 情感/观点/评论 倾向性分析

  • 中文阅读理解数据库

常用于 NLP 的深度学习模型

循环模型

  • RNN

    • 双向 RNN
  • LSTM

    • 双向 LSTM
  • GRU
  • TextRNN

卷积模型

  • TextCNN
  • DCNN

递归模型

  • Syntatically-Untied RNN

Seq2seq

(2014)

Transformer

(Google, 2017)

  • Self-Attention
  • Multi-Head Attention
  • Masked Multi-Head Attention

BERT

(Google, 2019)

  • 自编码模型 (擅长自然语言理解)

GPT-3

(OpenAI, 2020)

  • 自回归模型 (擅长自然语言生成)

发展历史

基于规则

  • 无法使用计算机进行泛化
  • 鲁棒性差

基于统计

  • 隐马尔可夫模型 Hidden Markov Model
  • 朴素贝叶斯 Naive Bayes
  • 条件随机场 Conditional Random Fields
  • K-近邻算法 K-Nearest Neighbors algorithm, KNN
  • 支持向量机 Support Vector Machine, SVM
  • 决策树 Decision Tree
  • K-均值 K-means

基于深度学习

一般应用处理流程

1. 语料获取

  • 已有语料
  • 公开数据集
  • 爬虫

2. 数据预处理

  • 语料清洗
  • 分词
  • 词性标注
  • 去停用词

3. 特征工程

  • 向量化

4. 特征选择

  • 合适的
  • 表达能力强的

5. 模型选择

  • 机器学习模型
  • 深度学习模型

6. 模型训练

  • 模型微调

7. 模型评估

  • 准确率
  • 召回率
  • 精准度
  • F1 值
  • ROC、AUC

8. 投产上线

  • 线下训练后部署
  • 在线持久化训练

自然语言应用

(按两端的类型来划分)

一对一

  • 中文分词
  • 词性标注
  • 语义角色标注

一对多

  • 文本生成
  • 图像描述生成

多对一

  • 文本分类
  • 情感分析

多对多

  • 机器翻译
  • 自动摘要
  • 聊天机器人

Attention 机制

(2015)

保留隐态各状态提供给解码器

自然语言应用

(按照阅读和理解来分类)

自然语言理解 NLU

自然语言生成 NLG

  • 文本到文本的生成

    • 文本摘要

      • 抽取式摘要

        • 论文自动生成摘要
        • 根据文字直播生成赛事报道
      • 生成式摘要

    • 古诗生成
    • 文本复述

      • 使用机器翻译的方法生成文本复述
  • 数据到文本的生成

    • 新闻报道生成
  • 图像到文本的生成

    • 为图像生成解释性文本
    • 故事生成
    • 基于图像的问答任务
Read more »

Markdown 支持情况测试

Posted on 2021-11-29 | In 工具

这篇文章用于测试 Markdown 支持情况

基础语法

粗体和斜体

这是粗体

这是斜体

这是粗体加斜体

列表

无序列表

  • 项目 1
  • 项目 2
    • 缩进 1
    • 缩进 2
      • 缩进 3
  • 项目 3

有序列表

  1. 项目 1
  2. 项目 2
    1. 缩进 1
    2. 缩进 2
      1. 缩进 3
  3. 项目 3

分隔线

使用短横线(-):


使用星号(*):


使用下划线(_):


图片

网络来源图片:

网络来源图片

本地来源图片:

本地来源图片

链接

这是 GitHub 的首页

引用

这是一段引用

这是一段嵌套引用

这是一段嵌套引用

包含标题的引用

  • 包含无序列表的引用 1
  • 包含无序列表的引用 2
    1. 包含有序列表的引用 1
    2. 包含有序列表的引用 2

粗体、斜体和粗斜体

引用内图片

转义字符

* 如果没有 \ 开头作为转义字符,这一行将会被渲染为无序列表

> 如果没有 \ 开头作为转义字符,这一行将会被渲染为引用

HTML 标签

这是粗体

这是斜体

这是粗斜体

这是插入线

这是删除线

扩展语法

表格

左对齐 居中对齐 右对齐
内容 这也一段很长很长的内容 内容
这是一段很长很长的内容 内容 这又一段很长很长的内容

代码块

行内代码块:

一个 C 程序总是从 main() 函数开始执行的

不指定语言的代码块:

1
2
3
4
5
6
7
#include <stdio.h>

int main()
{
   printf("Hello, World!");
   return 0;
}

指定语言的代码块:

1
2
3
4
5
6
7
#include <stdio.h>

int main()
{
   printf("Hello, World!");
   return 0;
}

标题编号

跳转到自定义标题编号

删除线

这是删除线

Emoji 表情

:smile::rofl::kissing_smiling_eyes::cupid::santa:

Read more »

VS Code Markdown All in One 扩展快捷键备忘

Posted on 2021-11-28 | In 工具

今日,Typora 推出了 1.0.0 正式版,并且变为了买断制收费软件,价格为 $14.99 | 3 devices,恰逢想把 Markdown 的写作整合进更常用的 VS Code 中,故开始寻找提升 Markdown 的写作体验的方法。

发现了一款名为 Markdown All in One 的插件,可以基本满足我的需求,在此简单记录下它在 Windows 下的快捷键

项目地址:https://github.com/yzhang-gh/vscode-markdown 商店地址:https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one

Read more »

常用的中文 NLP 库整理

Posted on 2021-10-23 | In AI

整理一些自己日常学习中常用到的中文 NLP 库

  • 常用的中文 NLP 库整理
    • 各常见工具库功能对比
    • NLP 常见中英文对照
    • 词性标注标签含义(PKU 规范)
  • jieba
    • 安装
    • 分词
    • 强制调高调低词频
    • 关键词提取(基于 TF-IDF 算法)
    • 关键词提取(基于 TextRank 算法)
    • 词性标注
  • SnowNLP
    • 安装
    • 引用和准备
    • 分词
    • 词性标注
    • 情感分析(返回 positive 的概率)
    • 汉字转拼音
    • 关键词提取
    • 文本摘要
    • 自动分句
  • Jiagu
    • 安装
    • 引用
    • 中文分词
    • 知识图谱关系抽取(作者仍在完善中)
    • 关键词提取
    • 文本摘要
    • 情感分析
  • Macropodus
    • 安装
    • 引用
    • 分词
    • 新词发现
    • 文本摘要
    • 关键词抽取
    • 文本相似度
    • 中文汉字转拼音
    • 中文繁简转换
    • 科学计算器
  • HanLP
    • 安装
    • 轻量级 RESTful API 使用
    • 海量级 native API 使用
    • 单独使用 native API 的单个功能
  • LTP
    • 安装
    • 导包与初始化
    • 分词
    • 词性标注(需要先分词)
    • 命名实体识别(需要先分词)
    • 语义角色标注(需要先分词)
    • 依存句法分析(需要先分词)
    • 语义依存分析(需要先分词)
  • THULAC
    • 安装
    • 引用和初始化
    • Python 3.8 及以上版本的错误处理
    • 分词及词性标注
  • pkuseg
    • 安装
    • 引用
    • 分词
    • 词性标注
  • zhconv

常用的中文 NLP 库整理

下面准备两段文本以供下文演示使用

1
2
3
4
5
6
7
8
9
10
11
12
TEXT = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。"

TEXT2 = u'''
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
所以它与语言学的研究有着密切的联系,但又有重要的区别。
自然语言处理并不是一般地研究自然语言,
而在于研制能有效地实现自然语言通信的计算机系统,
特别是其中的软件系统。因而它是计算机科学的一部分。
'''

各常见工具库功能对比

以下内容根据各库官方文档整理而来,仅供参考,可能并不准确

库名 分词 关键词提取 词性标注 情感分析 文本摘要 自定义词典 新词发现 依存句法分析 语义依存分析 语义角色标注 其他功能
jieba ✔ ✔ ✔     ✔ ✔       繁体分词
snownlp ✔   ✔ ✔ ✔           繁体转简体、转换成拼音
Jiagu ✔ ✔ ✔ ✔     ✔       文本聚类、知识图谱关系抽取
Macropodus ✔ ✔     ✔   ✔       文本相似度、中文数字阿拉伯数字互转、罗马数字与阿拉伯数字互转、中文繁简拼音互转
HanLP ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ 感知机词法分析、拼音简繁
LTP ✔   ✔         ✔ ✔ ✔  
THULAC ✔   ✔     ✔          
pkuseg ✔   ✔     ✔          

NLP 常见中英文对照

英文缩写 英文全称 中文
tok Tokenization 分词
pos Part-of-Speech Tagging 词性标注
lem Lemmatization 词干提取
fea Features of Universal Dependencies 词法语法特征
ner Named Entity Recognition 命名实体识别
dep Dependency Parsing 依存句法分析
con Constituency Parsing 短语成分分析
srl Semantic Role Labeling 语义角色标注
sdp Semantic Dependency Parsing 语义依存分析
amr Abstract Meaning Representation 抽象意义表示

词性标注标签含义(PKU 规范)

词性 含义
n 名词
t 时间词
s 处所词
f 方位词
m 数词
q 量词
b 区别词
r 代词
v 动词
a 形容词
z 状态词
d 副词
p 介词
c 连词
u 助词
y 语气词
e 叹词
o 拟声词
i 成语
l 习惯用语
j 简称
h 前接成分
k 后接成分
g 语素
x 非语素字
w 标点符号
nr 人名
ns 地名
nt 机构名称
nx 外文字符
nz 其它专名
vd 副动词
vn 名动词
vx 形式动词
ad 副形词

jieba

项目主页:fxsjy/jieba: 结巴中文分词

安装

1
pip install jieba

分词

1
2
3
4
5
6
import jieba

seg_list = jieba.cut(TEXT)
# 可以使用 HMM 自动新词发现
# seg_list = jieba.cut(TEXT, HMM=True)
print(" ".join(seg_list))
1
自然语言 处理 是 计算机科学 领域 与 人工智能 领域 中 的 一个 重要 方向 。

强制调高调低词频

1
2
3
4
# 将词汇加入词典
jieba.add_word('自然语言处理')
# 将词汇移出词典
jieba.del_word('自然语言处理')

关键词提取(基于 TF-IDF 算法)

1
jieba.analyse.extract_tags(TEXT2, topK=5)
1
['自然语言', '计算机科学', '语言学', '研究', '领域']

关键词提取(基于 TextRank 算法)

1
jieba.analyse.textrank(TEXT2, topK=5)
1
['领域', '研究', '计算机科学', '实现', '处理']

词性标注

1
2
3
4
5
import jieba.posseg as pseg

words = pseg.cut(TEXT)
for word, flag in words:
    print('%s %s' % (word, flag))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
自然语言 l
处理 v
是 v
计算机科学 n
领域 n
与 p
人工智能 n
领域 n
中 f
的 uj
一个 m
重要 a
方向 n
。 x

SnowNLP

项目主页:isnowfy/snownlp: Python library for processing Chinese text

安装

1
pip install snownlp

引用和准备

1
2
3
4
from snownlp import SnowNLP

s = SnowNLP(TEXT)
s2 = SnowNLP(TEXT2)

分词

1
print(s.words)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
['自然',
 '语言',
 '处理',
 '是',
 '计算机',
 '科学',
 '领域',
 '与',
 '人工',
 '智能',
 '领域',
 '中',
 '的',
 '一个',
 '重要',
 '方向',
 '。']

词性标注

1
list(s.tags)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[('自然', 'n'),
 ('语言', 'n'),
 ('处理', 'v'),
 ('是', 'v'),
 ('计算机', 'n'),
 ('科学', 'n'),
 ('领域', 'n'),
 ('与', 'c'),
 ('人工', 'b'),
 ('智能', 'n'),
 ('领域', 'n'),
 ('中', 'f'),
 ('的', 'u'),
 ('一个', 'm'),
 ('重要', 'a'),
 ('方向', 'n'),
 ('。', 'w')]

情感分析(返回 positive 的概率)

1
print(s.sentiments)
1
0.9999941826524298

汉字转拼音

1
print(s.pinyin)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
['Zi',
 'ran',
 'yu',
 'yan',
 'chu',
 'li',
 'shi',
 'ji',
 'suan',
 'ji',
 'ke',
 'xue',
 'ling',
 'yu',
 'yu',
 'ren',
 'gong',
 'zhi',
 'neng',
 'ling',
 'yu',
 'zhong',
 'de',
 'yi',
 'ge',
 'zhong',
 'yao',
 'fang',
 'xiang',
 '。']

关键词提取

1
s2.keywords(3)
1
['语言', '自然', '计算机']

文本摘要

1
print(s2.summary(3))
1
2
3
['因而它是计算机科学的一部分',
 '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向',
 '自然语言处理是一门融语言学、计算机科学、数学于一体的科学']

自动分句

1
print(s2.sentences)
1
2
3
4
5
6
7
8
9
10
11
12
['自然语言处理是计算机科学领域与人工智能领域中的一个重要方向',
 '它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法',
 '自然语言处理是一门融语言学、计算机科学、数学于一体的科学',
 '因此',
 '这一领域的研究将涉及自然语言',
 '即人们日常使用的语言',
 '所以它与语言学的研究有着密切的联系',
 '但又有重要的区别',
 '自然语言处理并不是一般地研究自然语言',
 '而在于研制能有效地实现自然语言通信的计算机系统',
 '特别是其中的软件系统',
 '因而它是计算机科学的一部分']

Jiagu

项目主页:ownthink/Jiagu: Jiagu深度学习自然语言处理工具 知识图谱关系抽取 中文分词 词性标注 命名实体识别 情感分析 新词发现 关键词 文本摘要 文本聚类

安装

1
pip install jiagu

引用

1
import jiagu

中文分词

1
2
3
4
5
6
words = jiagu.seg(TEXT)
print(words)

# 两种加载自定义词典方式(文件和列表)
# jiagu.load_userdict('dict/user.dict')
# jiagu.load_userdict(['自然语言处理'])
1
['自然', '语言', '处理', '是', '计算机科学', '领域', '与', '人工智能', '领域', '中', '的', '一个', '重要', '方向', '。']

知识图谱关系抽取(作者仍在完善中)

1
2
3
text = '姚明1980年9月12日出生于上海市徐汇区,祖籍江苏省苏州市吴江区震泽镇,前中国职业篮球运动员,司职中锋,现任中职联公司董事长兼总经理。'
knowledge = jiagu.knowledge(text)
print(knowledge)
1
2
3
[['姚明', '出生日期', '1980年9月12日'], 
['姚明', '出生地', '上海市徐汇区'], 
['姚明', '祖籍', '江苏省苏州市吴江区震泽镇']]

关键词提取

1
2
keywords = jiagu.keywords(TEXT2, 5)
print(keywords)
1
['语言', '重要', '研究', '计算机科学', '领域']

文本摘要

1
2
summarize = jiagu.summarize(TEXT2, 3) # 摘要
print(summarize)
1
2
3
4
['自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。', 
'自然语言处理是一门融语言学、计算机科学、数学于一体的科学。', 
'自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。']

情感分析

1
2
sentiment = jiagu.sentiment(TEXT)
print(sentiment)
1
('positive', 0.5022491674491385)

Macropodus

项目主页:yongzhuo/Macropodus: 自然语言处理工具Macropodus,基于Albert+BiLSTM+CRF深度学习网络架构,中文分词,词性标注,命名实体识别,新词发现,关键词,文本摘要,文本相似度,科学计算器,中文数字阿拉伯数字(罗马数字)转换,中文繁简转换,拼音转换。tookit(tool) of NLP,CWS(chinese word segnment),POS(Part-Of-Speech Tagging),NER(name entity recognition),Find(new words discovery),Keyword(keyword extraction),Summarize(text summarization),Sim(text similarity),Calculate(scientific calculator),Chi2num(chinese number to arabic number)

安装

1
pip install macropodus

引用

1
import macropodus

分词

1
2
words = macropodus.cut(TEXT)
print(" ".join(words))
1
自然 语言 处理 是 计算机科学 领域 与 人工智能 领域 中的 一个 重要 方向 。

新词发现

1
2
new_words = macropodus.find(TEXT)
print(new_words)
1
OrderedDict([('领域', {'a': 1.954304, 'r': 1.0, 'l': 1.0, 'f': 2, 'ns': 0.779392, 's': 3.046336})])

文本摘要

1
2
sum = macropodus.summarize(TEXT2)
print(sum)
1
2
3
4
5
6
7
[(0.11166493879895197, '所以它与语言学的研究有着密切的联系,但又有重要的区别'), 
(0.111456788084211, '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向'), 
(0.11142549186062257, 
'它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法'), 
(0.11130109445110857, '而在于研制能有效地实现自然语言通信的计算机系统,'), 
(0.11121725232156135, '因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,'), 
(0.11098393816916619, '因而它是计算机科学的一部分')]

关键词抽取

1
2
keyword = macropodus.keyword(TEXT2)
print(keyword)
1
[(0.05564029050840573, '自然'), (0.054388064653720425, '语言'), (0.048799148883632536, '计算机科学'), (0.046954259386264845, '领域'), (0.04470438240778767, '研究'), (0.0390803472982575, '重要')]

文本相似度

1
2
sim = macropodus.sim(sent1, sent2)
print(sim)
1
0.6502261253503653

中文汉字转拼音

1
2
res_pinyin = macropodus.pinyin(TEXT)
print(res_pinyin)
1
['zi', 'ran', 'yu', 'yan', 'chu', 'li', 'shi', 'ji', 'suan', 'ji', 'ke', 'xue', 'ling', 'ren', 'gong', 'zhi', 'neng', 'ling', 'zhong', 'de', 'yi', 'ge', 'zhong', 'yao', 'fang', 'xiang']

中文繁简转换

1
2
3
4
res_zh2han = macropodus.zh2han(TEXT)
print(res_zh2han)
res_han2zh = macropodus.han2zh(res_zh2han)
print(res_han2zh)
1
2
自然語言處理是計算機科學領域與人工智能領域中的一個重要方向。
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。

科学计算器

1
2
3
sen_calculate = "23 + 13 * (25+(-9-2-5-2*3-6/3-40*4/(2-3)/5+6*3))加根号144你算得几多"
score_calcul = macropodus.calculate(sen_calculate)
print(score_calcul)
1
698.000000

HanLP

项目主页:hankcs/HanLP: 中文分词 词性标注 命名实体识别 依存句法分析 成分句法分析 语义依存分析 语义角色标注 指代消解 风格转换 语义相似度 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁转换 自然语言处理

在线演示:HanLP在线演示 多语种自然语言处理

这个库现已升级至 2.X ,与旧版本 1.X 的 pyhanlp 库使用方式完全不同

安装

轻量级 RESTful API (使用官方服务器进行计算,API 申请)

1
pip install hanlp_restful

海量级 native API (使用本机进行计算)

1
pip install hanlp

轻量级 RESTful API 使用

1
2
3
4
5
6
from hanlp_restful import HanLPClient

# auth 不填则匿名,zh 中文,mul 多语种
HanLP = HanLPClient('https://www.hanlp.com/api', auth=None, language='zh') 
doc = HanLP.parse(TEXT)
doc.pretty_print()

HanLP结果展示

上图的结果可以看出结果包含了中文分词、词性标注、实体命名识别、依赖项解析、语义角色标记等内容

如果不使用 pretty_print() 函数,则会返回一个 json ,其中同样会包含上述内容,但需要自行解析以便查看

海量级 native API 使用

初次使用会下载一个略大于 1 GiB 的语料库,默认会保存至 C:\Users\[USERNAME]\AppData\Roaming\hanlp\ 下

1
2
3
4
5
6
import hanlp

# 世界最大中文语料库
HanLP = hanlp.load(hanlp.pretrained.mtl.UD_ONTONOTES_TOK_POS_LEM_FEA_NER_SRL_DEP_SDP_CON_XLMR_BASE)
doc = HanLP(TEXT)
doc.pretty_print()

输出结果与 RESTful API 完全一致,此处不再展示

单独使用 native API 的单个功能

1
2
3
4
5
import hanlp

HanLP = hanlp.load(hanlp.pretrained.mtl.UD_ONTONOTES_TOK_POS_LEM_FEA_NER_SRL_DEP_SDP_CON_XLMR_BASE)
doc = HanLP(TEXT, tasks='tok')
doc.pretty_print()
1
自然 语言 处理 是 计算机 科学 领域 与 人工智能 领域 中 的一个 重要 方向 。

只需修改上方代码的第 4 行,即可选择需要执行的任务,例如修改为 tasks='dep' 则只会执行分词和依存句法分析(RESTful API 使用单个功能的方法与此相同)

同样地,如果不使用 pretty_print() 函数,则会返回一个 json ,可以自行解析结果使用

LTP

项目主页:HIT-SCIR/ltp: Language Technology Platform

开发者:哈工大社会计算与信息检索研究中心(HIT-SCIR)

安装

1
pip install ltp

导包与初始化

1
2
3
4
from ltp import LTP

# 使用默认模型,也可指定自行下载的模型
ltp = LTP() 

分词

1
2
seg, hidden = ltp.seg([TEXT])
print(seg)
1
[['自然语言', '处理', '是', '计算机', '科学', '领域', '与', '人工智能', '领域', '中', '的', '一个', '重要', '方向', '。']]

词性标注(需要先分词)

1
2
pos = ltp.pos(hidden)
print(pos)
1
[['n', 'v', 'v', 'n', 'n', 'n', 'c', 'n', 'n', 'nd', 'u', 'm', 'a', 'n', 'wp']]

命名实体识别(需要先分词)

1
2
ner = ltp.ner(hidden)
print(ner)
1
[[]]

语义角色标注(需要先分词)

1
2
srl = ltp.srl(hidden)
print(srl)
1
[[[], [], [('A0', 0, 1), ('A1', 3, 13)], [], [], [], [], [], [], [], [], [], [], [], []]]

依存句法分析(需要先分词)

1
2
dep = ltp.dep(hidden)
print(dep)
1
[[(1, 2, 'FOB'), (2, 3, 'SBV'), (3, 0, 'HED'), (4, 6, 'ATT'), (5, 6, 'ATT'), (6, 10, 'ATT'), (7, 9, 'LAD'), (8, 9, 'ATT'), (9, 6, 'COO'), (10, 14, 'ATT'), (11, 10, 'RAD'), (12, 14, 'ATT'), (13, 14, 'ATT'), (14, 3, 'VOB'), (15, 3, 'WP')]]

语义依存分析(需要先分词)

1
2
sdp = ltp.sdp(hidden)
print(sdp)
1
[[(1, 2, 'FEAT'), (2, 3, 'dEXP'), (3, 0, 'Root'), (4, 6, 'FEAT'), (5, 6, 'FEAT'), (6, 9, 'eCOO'), (7, 9, 'mRELA'), (8, 9, 'FEAT'), (9, 14, 'LOC'), (10, 9, 'mDEPD'), (11, 9, 'mDEPD'), (12, 14, 'MEAS'), (13, 14, 'FEAT'), (14, 3, 'LINK'), (15, 3, 'mPUNC')]]

THULAC

项目主页:thunlp/THULAC-Python: 一个高效的中文词法分析工具包

安装

通过 pip 下载会同时下载一个模型文件

1
pip install thulac

引用和初始化

1
2
3
import thulac

thu = thulac.thulac()

Python 3.8 及以上版本的错误处理

因为 Python 3.8 开始不再拥有 time.clock(),所以直接使用会导致程序异常

可以通过添加以下代码解决

1
2
import time
setattr(time, "clock", time.perf_counter)

分词及词性标注

1
2
text = thu.cut(TEXT)
print(text)
1
[['自然', 'n'], ['语言', 'n'], ['处理', 'v'], ['是', 'v'], ['计算机', 'n'], ['科学', 'n'], ['领域', 'n'], ['与', 'p'], ['人工智能', 'n'], ['领域', 'n'], ['中', 'f'], ['的', 'u'], ['一个', 'm'], ['重要', 'a'], ['方向', 'n'], ['。', 'w']]

pkuseg

项目主页:lancopku/pkuseg-python: pkuseg多领域中文分词工具; The pkuseg toolkit for multi-domain Chinese word segmentation

安装

1
pip install pkuseg

引用

1
import pkuseg

分词

1
2
3
4
# 以默认配置加载模型
seg = pkuseg.pkuseg()
text = seg.cut(TEXT)
print(text)
1
['自然', '语言', '处理', '是', '计算机', '科学', '领域', '与', '人工', '智能', '领域', '中', '的', '一个', '重要', '方向', '。']

词性标注

1
2
3
4
# 开启词性标注功能
seg = pkuseg.pkuseg(postag=True)
text = seg.cut(TEXT)
print(text)
1
[('自然', 'n'), ('语言', 'n'), ('处理', 'v'), ('是', 'v'), ('计算机', 'n'), ('科学', 'n'), ('领域', 'n'), ('与', 'p'), ('人工', 'b'), ('智能', 'n'), ('领域', 'n'), ('中', 'f'), ('的', 'u'), ('一个', 'm'), ('重要', 'a'), ('方向', 'n'), ('。', 'w')]

zhconv

一个轻量级的繁简转换工具,支持地区词转换

TODO

Read more »

Python 调用 `sys.clock()` 报错

Posted on 2021-04-27 | In Python

问题产生过程

在编码过程中,尝试统计程序运行时间,使用了 sys.clock()

运行时,解释器给出了如下错误:

1
AttributeError: module 'sys' has no attribute 'clock'

问题产生原因

自 Python 3.8 起,该方法已被正式移除

问题解决方法

改用 time.perf_counter() 即可

信息来源

官方文档:https://docs.python.org/3.7/library/time.html

Deprecated since version 3.3, will be removed in version 3.8: The behaviour of this function depends on the platform: use perf_counter() or process_time() instead, depending on your requirements, to have a well defined behaviour.

Read more »
1 2 3 4 … 7
JueLuo

JueLuo

The better we get at getting better, the faster we will get better.

65 posts
21 categories
86 tags
GitHub Weibo Steam
© 2015 - 2024 JueLuo
Powered by Jekyll
Theme - NexT.Pisces