知识提取

知识提取是要解决结构化数据生成的问题。但是广义上讲,知识提取是数据质量提升中的一环,各种提升数据质量的方法,都可以视为某种知识提取。学术上一般是用自然语言处理的方法,但在实践中通常是利用规则。

我们要熟悉的概念和工具有 (假设大家已经熟悉了Python

  • 正则表达式 :正则表达式是字符串处理的基本功。常用工具re.数据爬取、数据清洗、实体提取、关系提取,都离不开regex。
  • 中文分词和词性标注 :分词也是后续处理的基础。常用工具jieba中文包.分词做得好,核心秘密在词库,算法的影响反而不太大。分词是会出错的。不过有些场合(比如检索排序),只要错误是一贯的,影响也不是太大。分词后面可以用规则来弥补。词性(Part of Speech, POS)就是中学大家学过的动词、名词、形容词等等的词的分类。一般的分词工具都会有词性标注的选项。
  • 命名实体识别 :用nltk调用Stanford NLP

正则表达式

这里我们可以使用Pythonre包(re – Regular Expressions)进行正则匹配

>>> import re
# 利用match方法匹配,如果匹配成功,返回一个Match对象,否则返回None
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object at 0x1026e18b8>
复制代码

当我们在Python中使用正则表达式时,re模块内部会干两件事情: 1.编译正则表达式,如果正则表达式的字符串本身不合法,会报错; 2.用编译后的正则表达式去匹配字符串。 如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配:

>>> import re
# 编译:
>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
>>> re_telephone.match('010-12345').groups()
('010', '12345')
>>> re_telephone.match('010-8086').groups()
('010', '8086')
# 匹配文本中所有email地址
mail_reg = re.compile(u'''((((e-)?mail|(e|E-)?MAIL|(e|E-)?Mail)|邮箱){1}(:|-|:|\ )*)?(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})''', re.X)
mail = mail_reg.findall(each_line.encode('utf-8').decode('utf-8'))
复制代码

更多方法见re官方文档 或者 Ubuntu上的Wiki ^_^


中文分词和词性标注

我们可以用jieba中文分词包进行分词和标注,本文档主要讲jieba使用,另外还有PyNLPIR 提供 NLPIR/ICTCLAS汉语分词的Python接口,看这个教程 pynlpir.readthedocs.io/en/latest/t… ,中文词性标记集 github.com/memect/kg-b…

特点

  • 支持三种分词模式:

    • 精确模式,试图将句子最精确地切开,适合文本分析;
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  • 支持繁体分词

  • 支持自定义词典


安装说明


代码对 Python 2/3 均兼容

  • 全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
  • 半自动安装:先下载 pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
  • 通过 import jieba 来引用

算法


  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

主要功能


1. 分词

  • jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
  • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  • 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
  • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
  • jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

代码示例

# encoding=utf-8
import jiebaseg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
print(", ".join(seg_list))seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))
复制代码

输出:

【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学【精确模式】: 我/ 来到/ 北京/ 清华大学【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
复制代码

2. 添加自定义词典


载入词典

  • 我们可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率
  • 用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
  • 词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
  • 词频省略时使用自动计算的能保证分出该词的词频。

自定义词典:userdict.txt

创新办 3 i
云计算 5
凱特琳 nz
复制代码
  • 更改分词器(默认为 jieba.dt)的 tmp_dircache_file 属性,可分别指定缓存文件所在的文件夹及其文件名,用于受限的文件系统。

  • 范例:

# 导入jieba
import jieba
# 导入自定义词典
jieba.load_userdict("userdict.txt")
test_sent = (
"李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
"例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
"「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
)
words = jieba.cut(test_sent)
print('/'.join(words))
# 导入自定义词典前的分词情况:
李小福/是/创新/办/主任/也/是/云/计算/方面/的/专家/;/ /什么/是/八/一双/鹿/
/例如/我/输入/一个/带/“/韩玉/赏鉴/”/的/标题/,/在/自定义词/库中/也/增加/了/此/词为/N/类/
/「/台/中/」/正確/應該/不會/被/切開/。/mac/上/可/分出/「/石墨/烯/」/;/此時/又/可以/分出/來凱/特琳/了/。
# 导入自定义词典后的分词情况:
李小福/是/创新办/主任/也/是/云计算/方面/的/专家/;/ /什么/是/八一双鹿/
/例如/我/输入/一个/带/“/韩玉赏鉴/”/的/标题/,/在/自定义词/库中/也/增加/了/此/词为/N/类/
/「/台中/」/正確/應該/不會/被/切開/。/mac/上/可/分出/「/石墨/烯/」/;/此時/又/可以/分出/來/凱特琳/了/。
复制代码

调整词典

  • 使用 add_word(word, freq=None, tag=None)del_word(word) 可在程序中动态修改词典。
  • 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

修改词典:

# 导入jieba
import jieba
# 导入自定义词典
jieba.load_userdict("userdict.txt")
# 增加自定义词
jieba.add_word('石墨烯')
jieba.add_word('凱特琳')
jieba.del_word('自定义词')
test_sent = (
"李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
"例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
"「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
)
words = jieba.cut(test_sent)
print('/'.join(words))
# 增加自定义词前的分词情况:
李小福/是/创新办/主任/也/是/云计算/方面/的/专家/;/ /什么/是/八一双鹿/
/例如/我/输入/一个/带/“/韩玉赏鉴/”/的/标题/,/在/自定义词/库中/也/增加/了/此/词为/N/类/
/「/台中/」/正確/應該/不會/被/切開/。/mac/上/可/分出/「/石墨/烯/」/;/此時/又/可以/分出/來/凱特琳/了/。
# 增加自定义词后的分词情况:
李小福/是/创新办/主任/也/是/云计算/方面/的/专家/;/ /什么/是/八一双鹿/
/例如/我/输入/一个/带/“/韩玉赏鉴/”/的/标题/,/在/自定义/词库/中/也/增加/了/此/词为/N/类/
/「/台中/」/正確/應該/不會/被/切開/。/mac/上/可/分出/「/石墨烯/」/;/此時/又/可以/分出/來/凱特琳/了/。
复制代码

调整词频:

>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中将/出错/。
>>> jieba.suggest_freq(('中', '将'), True)
494
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中/将/出错/。
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台/中/」/正确/应该/不会/被/切开
>>> jieba.suggest_freq('台中', True)
69
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台中/」/正确/应该/不会/被/切开
复制代码

3. 关键词提取


基于 TF-IDF 算法的关键词抽取

import jieba.analyse

  • jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

    • sentence 为待提取的文本
    • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
    • withWeight 为是否一并返回关键词权重值,默认值为 False
    • allowPOS 仅包括指定词性的词,默认值为空,即不筛选
  • jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件

代码示例 :

s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"
for x, w in jieba.analyse.extract_tags(s, withWeight=True):print('%s %s' % (x, w))欧亚 0.7300142700289363
吉林 0.659038184373617
置业 0.4887134522112766
万元 0.3392722481859574
增资 0.33582401985234045
4.3 0.25435675538085106
7000 0.25435675538085106
2013 0.25435675538085106
139.13 0.25435675538085106
实现 0.19900979900382978
综合体 0.19480309624702127
经营范围 0.19389757253595744
亿元 0.1914421623587234
在建 0.17541884768425534
全资 0.17180164988510638
注册资本 0.1712441526
百货 0.16734460041382979
零售 0.1475057117057447
子公司 0.14596045237787234
营业 0.13920178509021275
复制代码

关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径

  • 用法: jieba.analyse.set_idf_path(file_name) # file_name为自定义语料库的路径

关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径

  • 用法: jieba.analyse.set_stop_words(file_name) # file_name为自定义语料库的路径

基于 TextRank 算法的关键词抽取

  • jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 直接使用,接口相同,注意默认过滤词性。
  • jieba.analyse.TextRank() 新建自定义 TextRank 实例

算法论文: TextRank: Bringing Order into Texts

基本思想:

  1. 将待抽取关键词的文本进行分词
  2. 以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
  3. 计算图中节点的PageRank,注意是无向带权图

使用示例:

import jieba
import jieba.posseg
import jieba.analyses = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"for x, w in jieba.analyse.textrank(s, withWeight=True):print('%s %s' % (x, w))吉林 1.0
欧亚 0.9966893354178172
置业 0.6434360313092776
实现 0.5898606692859626
收入 0.43677859947991454
增资 0.4099900531283276
子公司 0.35678295947672795
城市 0.34971383667403655
商业 0.34817220716026936
业务 0.3092230992619838
在建 0.3077929164033088
营业 0.3035777049319588
全资 0.303540981053475
综合体 0.29580869172394825
注册资本 0.29000519464085045
有限公司 0.2807830798576574
零售 0.27883620861218145
百货 0.2781657628445476
开发 0.2693488779295851
经营范围 0.2642762173558316
复制代码

4. 词性标注


  • jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
  • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。

用法示例:

>>> import jieba.posseg as pseg
>>> words = pseg.cut("我爱北京天安门")
>>> for word, flag in words:
...    print('%s %s' % (word, flag))
...
我 r
爱 v
北京 ns
天安门 ns
复制代码

5. 并行分词


  • 原理:将目标文本按行分隔后,把各行文本分配到多个 Python 进程并行分词,然后归并结果,从而获得分词速度的可观提升

  • 基于 python 自带的 multiprocessing 模块,目前暂不支持 Windows

  • 用法:

    • jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数
    • jieba.disable_parallel() # 关闭并行分词模式
  • 代码示例:

import jieba
jieba.enable_parallel(4)
import jieba.posseg as psegdef cuttest(test_sent):result = pseg.cut(test_sent)for w in result:print(w.word, "/", w.flag, ", ", end=' ')  print("")if __name__ == "__main__":cuttest("这是一个伸手不见五指的黑夜。我叫孙悟空,我爱北京,我爱Python和C++。")cuttest("我不喜欢日本和服。")cuttest("雷猴回归人间。")cuttest("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作")cuttest("我需要廉租房")cuttest("永和服装饰品有限公司")cuttest("我爱北京天安门")cuttest("abc")cuttest("隐马尔可夫")cuttest("雷猴是个好网站")cuttest("“Microsoft”一词由“MICROcomputer(微型计算机)”和“SOFTware(软件)”两部分组成")cuttest("草泥马和欺实马是今年的流行词汇")cuttest("伊藤洋华堂总府店")cuttest("中国科学院计算技术研究所")cuttest("罗密欧与朱丽叶")cuttest("我购买了道具和服装")cuttest("PS: 我觉得开源有一个好处,就是能够敦促自己不断改进,避免敞帚自珍")cuttest("湖北省石首市")cuttest("湖北省十堰市")cuttest("总经理完成了这件事情")cuttest("电脑修好了")复制代码
  • 实验结果:在 4 核 3.4GHz Linux 机器上,对金庸全集进行精确分词,获得了 1MB/s 的速度,是单进程版的 3.3 倍。

  • 注意:并行分词仅支持默认分词器 jieba.dtjieba.posseg.dt

6. Tokenize:返回词语在原文的起止位置


  • 注意,输入参数只接受 unicode
  • 默认模式
result = jieba.tokenize(u'永和服装饰品有限公司')
for tk in result:print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
复制代码
word 永和                start: 0                end:2
word 服装                start: 2                end:4
word 饰品                start: 4                end:6
word 有限公司            start: 6                end:10
复制代码
  • 搜索模式
result = jieba.tokenize(u'永和服装饰品有限公司', mode='search')
for tk in result:print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
复制代码
word 永和                start: 0                end:2
word 服装                start: 2                end:4
word 饰品                start: 4                end:6
word 有限                start: 6                end:8
word 公司                start: 8                end:10
word 有限公司            start: 6                end:10
复制代码

命名实体识别

NLTK 与 Stanford NLP

NLTK 是一款著名的 Python 自然语言处理(Natural Language Processing, NLP)工具包,在其收集的大量公开数据集、模型上提供了全面、易用的接口,涵盖了分词、词性标注(Part-Of-Speech tag, POS-tag)、命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。 Stanford NLP 是由斯坦福大学的 NLP 小组开源的 Java 实现的 NLP 工具包,同样对 NLP 领域的各个问题提供了解决办法。 现在的 NLTK 3.2中,通过封装提供了 Stanford NLP 中的以下几个功能:

  • 分词
  • 词性标注
  • 命名实体识别
  • 句法分析依存句法分析

操作步骤: 参考原帖:www.jianshu.com/p/4b3c7e757… 在python中下载并安装nltk:github.com/nltk/nltk 下载stanford相关包,这里选用3.6.0版本(即2015-12-09更新版本): stanford-ner-2015-12-09.zip(nlp.stanford.edu/software/CR… stanford-parser-full-2015-12-09.zip(nlp.stanford.edu/software/le… stanford-postagger-full-2015-12-09.zip(nlp.stanford.edu/software/ta… stanford-segmenter-2015-12-09.zip(nlp.stanford.edu/software/se… 全部zip包解压并存放于/opt目录下 对stanford-segmenter-2015-12-09文件文件夹中stanford-segmenter-3.6.0.jar做软连接,命令行输入

ln -s stanford-segmenter-3.6.0.jar stanford-segmenter.jar
复制代码

在~/.bashrc文件中添加如下内容:

export STANFORD_SEGMENTER_PATH="/opt/stanford-segmenter-2015-12-09"
export CLASSPATH="$CLASSPATH:$STANFORD_SEGMENTER_PATH/stanford-segmenter.jar:$STANFORD_SEGMENTER_PATH/slf4j-api.jar"export STANFORD_POSTAGGER_PATH="/opt/stanford-postagger-full-2015-12-09"
export CLASSPATH="$CLASSPATH:$STANFORD_POSTAGGER_PATH/stanford-postagger.jar"export STANFORD_PARSER_PATH="/opt/stanford-parser-full-2015-12-09"
export CLASSPATH="$CLASSPATH:$STANFORD_PARSER_PATH/stanford-parser.jar:$STANFORD_PARSER_PATH/stanford-parser-3.6.0-models.jar"export STANFORD_NER_PATH="/opt/stanford-ner-2015-12-09"
export CLASSPATH="$CLASSPATH:$STANFORD_NER_PATH/stanford-ner.jar"export STANFORD_MODELS="$STANFORD_NER_PATH/classifiers:$STANFORD_POSTAGGER_PATH/models"
复制代码

命令行输入

source ~/.bashrc
复制代码

启动python即可,示例(注意python2.x和python3.x的语法区别):

# coding: utf-8
from nltk.tokenize import StanfordSegmenter
segmenter = StanfordSegmenter(path_to_sihan_corpora_dict="/root/stanford-segmenter-2015-12-09/data/",path_to_model="/root/stanford-segmenter-2015-12-09/data/pku.gz",path_to_dict="/root/stanford-segmenter-2015-12-09/data/dict-chris6.ser.gz")
res = segmenter.segment(u"北海已成为中国对外开放中升起的一颗明星")
print(type(res))
print(res)
复制代码

NLP数据分词小整理相关推荐

  1. NLP数据预处理与词嵌入

    NLP数据预处理与词嵌入 NLP数据预处理 读入语料库 首先准备一个语料库,实际上就是一个 txt 文件,这里用的是小说 time machine ,该语料库比较短小,仅有 ~3000 行,~3000 ...

  2. 山东大学软件学院数据可视化知识点整理

    数据可视化知识点整理 数据可视化主要工具: Google Refine Echarts Pyecharts Tableau R Rrocessing D3(JS) 主要编程工具: Python Lec ...

  3. 吴恩达:AI的下一个发展方向,从大数据转向小数据

    AI 发展方向需要转向「小数据」了. 吴恩达(Andrew Ng)在 AI 领域有着很高的声誉.在 2000 年代后期,他率先使用 GPU 与斯坦福大学的学生一起训练深度学习模型,并于 2011 年创 ...

  4. NLP数据科学家不会告诉你的残酷事实

    2020-02-22 12:30:00 全文共2044字,预计学习时长6分钟 来源:Pexels 近期,Tractica的报告显示,人工智能支持的NLP软件市场预计将从2016年的1.36亿美元增加到 ...

  5. 《大数据,小时代,向移动互联网迁徙-2012上半年移动互联网数据分享》_DCCI

    2019独角兽企业重金招聘Python工程师标准>>> <大数据,小时代,向移动互联网迁徙-2012上半年移动互联网数据分享>_DCCI 作为公共数据平台,DCCI互联网 ...

  6. 常看网页表单数据_数据收集、整理低效繁琐?WPS表单帮你轻松解决

    在21世纪这个高速发展的信息时代,不管我们从事何种职业,身处哪个岗位,几乎都会遇到数据收集及整理这类工作,比如收集用户问题反馈.组织活动报名.投票统计.销售数据统计以及学生/员工资料收集等等. 遇到上 ...

  7. 大道至简:大数据、小数据、量化交易

    大道至简:大数据.小数据.量化交易, 11.23 今天下午在Q群:124134140(zwPython大数据量化交易). 与大家讨论大数据.量化交易, 没想到,晚上就碰到了一只黑天鹅 惯例,QQ讨论直 ...

  8. 大数据——Flink 知识点整理

    目录 1. Flink 的特点 2. Flink 和 SparkStreaming 的对比 3. Flink 和 Blink.Alink之间的关系 4. JobManager 和 TaskManage ...

  9. 机器学习必须需要大量数据?小数据集也能有大价值!

    机器学习必须需要大量数据?小数据集也能有大价值! https://mp.weixin.qq.com/s/xGnDcRtKKt4FyVRAMPSqYA [导读]数据不够大,就不能玩深度学习?长期存在的一 ...

最新文章

  1. (11/24) css进阶:Less文件的打包和分离
  2. MVC layout 命名空间引用问题
  3. sap 获取计划订单bapi_sapbapi的清单.doc
  4. linux printk 源码,Printk原理简介
  5. jquery实现图片懒加载
  6. OpenCV学习笔记五-图像混合
  7. Java 8 Friday:更多功能关系转换
  8. 制作 小 linux 教程,用BusyBox制作Linux最小系统
  9. android让图片旋转动画,利用RotateAnimation旋转图片的问题 - 移动平台 / Android
  10. 13.2 Question Answering 问答系统意境级讲解
  11. iOS在照片上添加水印
  12. 20145307《信息安全系统设计基础》第十四周学习总结
  13. linux 程序 指定网卡,Linux socket绑定指定网卡实现负载均衡
  14. 费曼纪念日,霍金和蚁人下了一盘的“量子象棋”
  15. android 实现层叠列表,RecyclerView进阶之层叠列表(下)
  16. Python如何设置文件保存位置(txt文件保存位置)
  17. jdk11安装及网盘下载地址
  18. 分享两个解决Mac 访问Github的好方法
  19. 2021高考萧山二中成绩查询,2021年杭州高考各高中成绩及本科升学率数据排名及分析...
  20. Mybatis(黑马程序员)

热门文章

  1. Google Python Class --- Sorting
  2. 使用Active Directory的常见问题2
  3. DP之最优二叉查找树
  4. Visual Studio 2008 和 .NET 3.5 发布了
  5. AI强势来袭,锁上手机就真的安全了吗?
  6. ElasticSearch安装入门
  7. Linux学习笔记十四周一次课(5月9日)
  8. ArcEngine数据删除几种方法和性能比较
  9. pigcms 标签读不出
  10. 绿色版mysql安装步骤