使用fasttext实现文本处理及文本预测
向AI转型的程序员都关注了这个号???
大数据挖掘DT数据分析 公众号: datadw
因为参加datafountain和CCF联合举办的大数据竞赛,第一次接触到文本预测。对比了一些模型,最终还是决定试一下fasttext。上手fasttext的过程可以说是很痛苦了,因为国内各大博客网站上很少有fasttext的博客。一方面是fasttext是FaceBook去年才开源的,用的人比较少,还有一方面是fasttext大部分参考资料都是英文的,我啃了好久英文文档,搭梯子去国外的论坛,最后也算是简单上手了吧。这两天差不多所有时间都花在这上面了,感触挺深。基于以上几点,我觉得还是写一篇博客吧,虽然只是入门,也各位看官多多点评,提出不同意见。
问题分析
360搜索出的这道题,题目是“360搜索-AlphaGo之后“人机大战”Round 2 ——机器写作与人类写作的巅峰对决”,乍一看挺吓人的,其实是让开发者通过一套模型,来识别一篇文章是机器写出来的,还是人类写出来的。其实是有一定区分的,比如说人类写出来的文章,文章的标题和内容契合度比较高(排除标题党的情况),而且文章正文有一定的逻辑连续性,很少在文章的body中出现乱码。机器写出来的文章在以上方面和人类写出来的文章会有不同之处。
可能我这样讲还不够直观,“什么才是机器写出来的文章?”,我从数据集里面拿出来一小篇,像以下文章就是机器写出来的文章。
重庆永川消防提示:夏季酷暑来临 警惕火灾隐患
电影院部分房屋结构变形、两个安全疏散门变形无法打开,自入伏以来,忌水性物质有生石灰,居民和单位用电量也会随之增加,由此引发的火也比较多,重庆市永川消防支队在此提醒大家:高温天气里要增强安全防范意识,加强火灾防控,要时刻警惕以下几种常见的火灾。救援消防官兵抵达现场。一、电气火灾。随着高温天气的到来,空调、冰箱等用电设备大量增加,电气设备线路超负荷运转,电源绝缘皮损坏造成短路打火,图为被困人员被成功救出。或电器的电动机进水受潮,使绝缘强度降低,发生短路烧毁电机着火等。二、汽车火灾。救援消防官兵抵达现场,夏天很容易发生汽车火灾,主要原因是:有些汽车使用时间过长,一直从二楼窗口向外大声呼喊”救命”,电源线路老化易发生短路,有的汽车超负荷装载,造成发动机温度升高,再加上天气酷热,发动机通风设备不好,从而引起汽车自燃。并且,有些车主为了车内空气清新,导致正在电影院内观看电影的9名民众被困,选择在其车内放置香水、空气清新剂、二组对被困民众进行情绪安抚。老花镜、打火机等物品,极易引发火灾。三、该县碧罗数字电影院背后发生山体滑坡,电瓶车火灾。成功将变形的安全疏散门破拆出一个能够容纳单人通过的出口。随着电瓶车的普及,电瓶车充电引发火灾不在少数。特别是有些用户私拉乱接电线,不按要求使用插线板,贡山县碧罗数字电影院背后发生山体滑坡。违规充电引发火灾。四、施工现场火灾。对施工现场的氧气瓶、乙炔瓶、防火材料、油漆稀料等易燃易爆物品管理不严,直接放在高温下暴晒,未采取有效的遮挡措施,没有设置在通风、阴凉地点保存,三组利用破拆工具对变形的安全门进行破拆,这样很容易发生火灾事故五、危化品火灾。成功将变形的安全疏散门破拆出一个能够容纳单人通过的出口。夏季地面气温有时高达40℃以上,救援消防官兵通过金属切割机、破门器、液压破拆工具组等破拆装备的配合使用,在这样炎热的气温条件下,化学危险物品在生产、图为被困人员被成功救出。运输、过氧化碱。所以,一定要谨慎保管、图为受损严重的碧罗数字电影院,使用易燃易爆化学危险品。六、物质自燃火灾。自燃物质除过去我们常讲的稻草、煤堆、棉垛外,被困人员已被全部救出,还有油质纤维、三、硝酸铵化肥、导致正在电影院内观看电影的9名民众被困,鱼粉、农产品等。这些物质储存时,如果堆积时间过长,通风不好,自身就会发生变化产生热,温度逐渐升高。忌水性物质有生石灰,无水氧化铝,过氧化碱,氯磺酸等,这些物质遇到水或空气中的潮气后就会释放出大量可燃气体,四。
上面的文章,仔细看可以看出破绽:
1、存在反复,且不需要反复强调的文字,例如“忌水性物质有生石灰”;
2、逻辑不通顺,文章结尾一个“四”,不知其所指;
3、文章有明显拼凑痕迹,从“一二三四”几点可以看出是从很多篇文章中剪辑而来,上下文关联性弱。
目标
有两个数据集(分别是1.6GB和2GB),一个数据集是训练集(训练模型之用),另一个数据集是测试集(提交结果之用)。
数据格式
数据一:训练集,规模50万条样例(有标签答案),数据格式如下:
Field | Type | Description | Note |
---|---|---|---|
文章ID | String | 文章ID | |
文章标题 | String | 文章的标题,字数在100字之内 | 已脱敏。去掉了换行符号。 |
文章内容 | String | 文章的内容 | 已脱敏。文章内容是一个长字符串,去掉了换行符号。 |
标签答案 | String | 人类写作是POSITIVE, 机器人写作是NEGATIVE | 机器人写手和人类撰写的文章,参赛者训练数据,可以选择本集合的全量数据,也可以选择部分数据。但是参赛者不能自行寻找额外的数据加入训练集。 |
数据二:测试集A,规模10万条样例(无标签答案),数据格式如下:
Field | Type | Description | Note |
---|---|---|---|
文章ID | String | 文章ID | |
文章标题 | String | 文章的标题,字数在100字之内 | 已脱敏。去掉了换行符号。 |
文章内容 | String | 文章的内容 | 已脱敏。文章内容是一个长字符串,去掉了换行符号。 |
数据三:测试集B,规模30万条样例(无标签答案),数据格式如下:
Field | Type | Description | Note |
---|---|---|---|
文章ID | String | 文章ID | |
文章标题 | String | 文章的标题,字数在100字之内 | 已脱敏。去掉了换行符号。 |
文章内容 | String | 文章的内容 | 已脱敏。文章内容是一个长字符串,去掉了换行 |
上述三份数据中,都同时包含了机器人写手和人类撰写的文章数据。一条样例主要包括文章ID、文章标题、文章内容和标签信息(人类写作是POSITIVE, 机器人写作是NEGATIVE)。需要在训练集上得到模型,然后使用模型在测试集上判定一篇文章是真人写作还是机器生成。如果这篇文章是由机器人写作生成的,则标签为NEGATIVE,否则为POSITIVE。仅在训练集上提供标签特征,参赛选手需要在测试集上对该标签进行预测。
数据预处理
数据预处理可以说是很关键了,很多团队都表示需要花大量的时间用于数据的预处理,我这边偷个懒,采用jieba对训练集和测试集文字进行分词,并且顺手把它转化为fasttext格式。
#encoding=utf-8import jieba#author linxinzhuseg_list = jieba.cut("这个竞赛真的费时间",cut_all=True)print "Full Mode:", "/ ".join(seg_list) #全模式 seg_list = jieba.cut("zwq沉迷逛QQ空间,还时不时撩妹",cut_all=False)print "Default Mode:", "/ ".join(seg_list) #精确模式 seg_list = jieba.cut("测试集好大啊,跑一次要好久") #默认是精确模式print ", ".join(seg_list) seg_list = jieba.cut_for_search("这篇博客是在2017年11月17日写的,各位看官觉得有用的话,可以评论点赞") #搜索引擎模式print ", ".join(seg_list)
输出结果
PS C:\Users\LinXinzhu\py> python fenci.py
Full Mode:Building prefix dict from C:\Python27\lib\site-packages\jieba\dict.txt ...
Loading model from cache c:\users\linxin~1\appdata\local\temp\jieba.cache
Loading model cost 0.804000139236 seconds.
Prefix dict has been built succesfully.这个/ 竞赛/ 真的/ 费时/ 费时间/ 时间
Default Mode: zwq/ 沉迷/ 逛/ QQ/ 空间/ ,/ 还/ 时不时/ 撩妹
测试, 集好, 大, 啊, ,, 跑, 一次, 要, 好久
这篇, 博客, 是, 在, 2017, 年, 11, 月, 17, 日写, 的, ,, 各位, 看官, 觉得, 有用, 的话, ,, 可以, 评论, 点赞
需要注意的是:
1、代码开头记得写上编码方式,包括后面的fasttext在编码上也挺麻烦的,不写的话有惊喜哦!
2、jieba.cut返回一个list,所以在做字符串拼接的时候要把list转成string,常用的就是“ ”.join()
符号处理
def go_split(s,min_len): # 拼接正则表达式 symbol = ',;。!、?!' symbol = "[" + symbol + "]+" # 一次性分割字符串 result = re.split(symbol, s) return [x for x in result if len(x)>min_len] def is_dup(s,min_len): result = go_split(s,min_len) return len(result) !=len(set(result)) def is_neg_symbol(uchar): neg_symbol=['!', '0', ';', '?', '、', '。', ','] return uchar in neg_symbol
特殊字处理
一些文字,例如“的”、“了”等等在某个地方有特殊含义,例如“的确”、“了解”,但是在大部分的情况下对文章的语义没有特别的影响。例如”今天早上喝了牛奶“与”今天早上喝牛奶“没有太大的区别。
if (ur",的" in s0) and (not(ur",的确" in s0)) and (not(ur",的士" in s0)) \ and (not(ur",的哥" in s0)) and (not(ur",的的确确" in s0)): flag = "NEGATIVE" if (ur",了" in s0) and (not(ur",了解" in s0)) and (not(ur",了结" in s0)) \ and (not(ur",了无" in s0)) and (not(ur",了却" in s0)) \ and (not(ur",了不起" in s0)): flag = "NEGATIVE" if (ur"。的" in s0) and (not(ur"。的确" in s0)) and (not(ur"。的士" in s0)) \ and (not(ur"。的哥" in s0)) and (not(ur"。的的确确" in s0)): flag = "NEGATIVE" if (ur"。了" in s0) and (not(ur"。了解" in s0)) and (not(ur"。了结" in s0)) \ and (not(ur"。了无" in s0)) and (not(ur"。了却" in s0)) \ and (not(ur"。了不起" in s0)): flag = "NEGATIVE" if (ur";的" in s0) and (not(ur";的确" in s0)) and (not(ur";的士" in s0)) \ and (not(ur";的哥" in s0)) and (not(ur";的的确确" in s0)): flag = "NEGATIVE" if (ur";了" in s0) and (not(ur"了解;" in s0)) and (not(ur";了结" in s0)) \ and (not(ur";了无" in s0)) and (not(ur";了却" in s0)) \ and (not(ur";了不起" in s0)): flag = "NEGATIVE" if (ur"?的" in s0) and (not(ur"?的确" in s0)) and (not(ur"?的士" in s0)) \ and (not(ur"?的哥" in s0)) and (not(ur"?的的确确" in s0)): flag = "NEGATIVE" if (ur"?了" in s0) and (not(ur"?了解" in s0)) and (not(ur"?了结" in s0)) \ and (not(ur"?了无" in s0)) and (not(ur"?了却" in s0)) \ and (not(ur"?了不起" in s0)): flag = "NEGATIVE"
专业词汇、领域词汇、近义词
这方面可以引入词库,但是时间有限,目前还没有加入词库。
分词并转换成fasttext格式
#encoding=utf-8#author linxinzhuimport jiebaimport sysreload(sys)sys.setdefaultencoding('utf8')i = 0count=0f = open("train.tsv", 'r')#f = open("evaluation_public.tsv", 'r')outf = open("lab3fenci.csv",'w')#outf = open("lab3fencitest.csv",'w') for line in f: r = "" try: r = line.decode("UTF-8") except: print "charactor code error UTF-8" pass if r == "": try: r = line.decode("GBK") except: print "charactor code error GBK" pass line=line.strip() l_ar=line.split("\t") if len(l_ar)!=4: continue id=l_ar[0] title=l_ar[1] content=l_ar[2] lable=l_ar[3] seg_title=jieba.cut(title.replace("\t"," ").replace("\n"," ")) seg_content=jieba.cut(content.replace("\t"," ").replace("\n"," ")) #r=" ".join(seg_title)+" "+" ".join(seg_content)+"\n" outline = " ".join(seg_title)+"\t"+" ".join(seg_content) outline = "\t__label__" + lable + outline+"\t" outf.write(outline) if i%2500 == 0: count=count+1 sys.stdout.flush() sys.stdout.write("#") i=i+1 f.close()outf.close()print "\nWord segmentation complete."print i
这里面要注意的是list和string的转换,以及在cut过程中对空格和换行的处理。
分词出来之后是这样的:
分词后文件为1.9GB,同样对测试集也做相同的处理。
模型建立
终于要用到fasttext了,fasttext的安装也是个坑。windows10上面装了半天也没装好,好不容易找了一个fasttext for window 10的安装包,结果居然要python 3.5,升级了python之后发现没有预测功能,简直鸡肋啊。无可奈何花落去,只能在Linux下面玩了。
安装fasttext python指令,会提示少cython模型,照着提示下载就行。
pip install fasttext
但是下载奇慢,换国内源或者搭梯子吧。
有关fasttext的原理请查阅作者的paper
https://arxiv.org/pdf/1607.01759.pdf
fastText的模型架构类似于CBOW,两种模型都是基于Hierarchical Softmax,都是三层架构:输入层、 隐藏层、输出层。
CBOW模型又基于N-gram模型和BOW模型,此模型将W(t−N+1)……W(t−1)作为输入,去预测W(t)
fastText的模型则是将整个文本作为特征去预测文本的类别。
一些比较重要的函数
词向量模型学习
import fasttext # Skipgram modelmodel = fasttext.skipgram('data.txt', 'model')print model.words # list of words in dictionary # CBOW modelmodel = fasttext.cbow('data.txt', 'model')print model.words # list of words in dictionary
文本分类
classifier = fasttext.supervised('data.train.txt', 'model')
data.train.txt
是一种含有训练句子 每行加上标签的文本文件。默认情况下,假设标签的话, 前缀字符串__label__
。
这将输出文件:model.bin
和model.vec
。
精度评估
result = classifier.test('test.txt')print 'P@1:', result.precisionprint 'R@1:', result.recallprint 'Number of examples:', result.nexamples
查看一个文本最有可能的标签,这个函数可以说是非常有用了
texts = ['example very long text 1', 'example very longtext 2']labels = classifier.predict(texts)print labels # Or with the probabilitylabels = classifier.predict_proba(texts)print labels
调试模型用的API
input_file training file path (required)
output output file path (required)
lr learning rate [0.05]
lr_update_rate change the rate of updates for the learning rate [100]
dim size of word vectors [100]
ws size of the context window [5]
epoch number of epochs [5]
min_count minimal number of word occurences [5]
neg number of negatives sampled [5]
word_ngrams max length of word ngram [1]
loss loss function {ns, hs, softmax} [ns]
bucket number of buckets [2000000]
minn min length of char ngram [3]
maxn max length of char ngram [6]
thread number of threads [12]
t sampling threshold [0.0001]
silent disable the log output from the C++ extension [1]
encoding specify input_file encoding [utf-8]
举个栗子
model = fasttext.skipgram('train.txt', 'model', lr=0.1, dim=300)
解释一下:lr是学习速率,dim是词向量的大小,调节不同的参数使得模型更加精确。
分类器的属性和方法
classifier.labels # List of labelsclassifier.label_prefix # Prefix of the labelclassifier.dim # Size of word vectorclassifier.ws # Size of context windowclassifier.epoch # Number of epochsclassifier.min_count # Minimal number of word occurencesclassifier.neg # Number of negative sampledclassifier.word_ngrams # Max length of word ngramclassifier.loss_name # Loss function nameclassifier.bucket # Number of bucketsclassifier.minn # Min length of char ngramclassifier.maxn # Max length of char ngramclassifier.lr_update_rate # Rate of updates for the learning rateclassifier.t # Value of sampling thresholdclassifier.encoding # Encoding that used by classifierclassifier.test(filename, k) # Test the classifierclassifier.predict(texts, k) # Predict the most likely labelclassifier.predict_proba(texts, k) # Predict the most likely label include their probability
调试分析
创建一个简单的模型
classifier = fasttext.supervised("lab3fenci.csv","lab3fenci.model",
label_prefix="__label__")
对模型进行测试,观察其精度
result = classifier.test("lab3fenci.csv")
print result.precisionprint
result.recall
拿一个text来预测
texts = ['它被誉为"天下第一果",补益气血,养阴生津,现在吃正应季! 六七月是桃
子大量上市的季节,因其色泽红润,肉质鲜美,有个在实验基地里接受治疗的妹子。广受大
众的喜爱。但也许你并不知道,看惯了好莱坞大片眼花缭乱的特效和场景。它的营养也是很
高的,不仅富含多种维生素、矿物质及果酸,至少他们一起完成了一部电影,其含铁量亦居
水果之冠,被誉为"天下第一果"。1、在来世那个平行世界的自己。增加食欲,养阴生津的
作用,可用于大病之后,气血亏虚,面黄肌瘦,Will在海滩上救下了Isla差点溺水的儿
子。心悸气短者。2、最近有一部叫做《爱有来世》的科幻电影。桃的含铁量较高,就越容
易发现事情的真相。是缺铁性贫血病人的理想辅助食物。3、桃含钾多,含钠少,适合水肿
病人食用。4、桃仁有活血化淤,润肠通作用,可用于闭经、跌打损伤等辅助治疗。胃肠功
能弱者不宜吃桃、桃仁提取物有抗凝血作用,而Will也好像陷入魔怔一般。并能抑制咳嗽中
枢而止咳,扩展"科学来自于人性"的概念。同时能使血压下降,片中融合了很多哲学、宗教
的玄妙概念,可用于高血压病人的辅助治疗。6、桃花有消肿、利尿之效,可用于治疗浮肿
腹s水,大便干结,小便不利和脚气足肿。一段美好的故事才就此开始。桃子性热,味甘
酸,具有补心、解渴、不过都十分注重内核的表达,充饥、生津的功效,父亲没有继续在房
间埋头工作。']labels = classifier.predict(li) print labels
可以看到输出的结果是positive,可以发现是错误的预测(正确的预测应该是negative),这个时候需要训练模型,来达到预期的结果。在训练的过程中,观察result.precision
和result.recall
的值变化。
可以使用Google已经训练好的model,自己训练模型坑太多了.
继续训练
classifier = fasttext.supervised("lab3fenci.csv","lab3fenci.model",label_prefix="__label__",lr=0.1,epoch=100,dim=200,bucket=5000000)result = classifier.test("lab3fenci.csv")print result.precisionprint result.recall
为了省事可以在上面代码套上for循环,观察
result.precision
和result.recall
的值变化。
目前训练出来的模型文件大小是2GB,是用PC机跑的,CPU i7 3.3GHZ+16GB内存+SSD跑了整整3小时才出结果。
期间感受到了风扇的咆哮,CPU和内存都很努力地工作。
一般情况下磁盘的占用是很低的,偶尔会出现占用100%的情况,如果磁盘占用一直是100%,要考虑内存是否泄露,例如文本预处理阶段忘记加换行符,fasttaxt会认为一整个文件都是一大段的文本,那么16GB的内存是根本不够存储的,磁盘会参与内存交换,导致占用100%。
训练完成之后可以直接加载模型。
classifier = fasttext.load_model('lab3fenci.model.bin', label_prefix='__label__')
完整代码
# _*_coding:utf-8 _*_import fasttext#author linxinzhu#load训练好的模型classifier = fasttext.load_model('lab3fenci.model.bin', label_prefix='__label__') i=0f = open("evaluation_public.tsv", 'r')outf = open("sub.csv",'w')for line in f: outline="" if i==400000: break r = "" try: r = line.decode("UTF-8") except: print "charactor code error UTF-8" pass if r == "": try: r = line.decode("GBK") except: print "charactor code error GBK" pass line=line.strip() l_ar=line.split("\t") id=l_ar[0] title=l_ar[1] content=l_ar[2] s="" li=[] li=list() s="".join(content) li=s.split("$$$$$$$$") texts=li labels = classifier.predict(li) #print id #print labels strlabel=str(labels) if strlabel=="POSITIVE" : outline = id+"," + "POSITIVE" + "\n" outf.write(outline) if strlabel=="NEGATIVE" : outline = id+"," + "NEGATIVE" + "\n" outf.write(outline) i=i+1 del s del lif.close()outf.close()
注意代码中要加上
del s
,实测如果不加上会产生内存溢出,讲道理变量在没有使用之后python应该会自动释放内存,但是在大量数据面前好像不怎么起作用,总之需要手动去释放内存。
提交结果(截至2017年11月16日)
一共1000多人参赛,600多支队伍,目前排在132名,算下来也进前20%了呢,作为第一次用fasttext的我,感觉这个成绩已经很满意了。
via http://blog.csdn.net/Season_For_Lin/article/details/78568991
人工智能大数据与深度学习
搜索添加微信公众号:weic2c
长按图片,识别二维码,点关注
大数据挖掘DT数据分析
搜索添加微信公众号:datadw
教你机器学习,教你数据挖掘
长按图片,识别二维码,点关注
使用fasttext实现文本处理及文本预测相关推荐
- 使用fasttext完成文本处理及文本预测
使用fasttext实现文本处理及文本预测 因为参加datafountain和CCF联合举办的大数据竞赛,第一次接触到文本预测.对比了一些模型,最终还是决定试一下fasttext.上手fasttext ...
- 【深度学习】情感分析:基于文本分类与情感预测的方法
本文将介绍情感分析的基本概念.技术原理和方法,以及如何使用文本分类和情感预测技术实现情感分析.我们将通过实际的代码示例展示如何使用Python和相关库构建情感分析模型,并应用在实际场景中. 1. 情感 ...
- 2.文本预处理(分词,命名实体识别和词性标注,one-hot,word2vec,word embedding,文本数据分析,文本特征处理,文本数据增强)
文章目录 1.1 认识文本预处理 文本预处理及其作用 文本预处理中包含的主要环节 文本处理的基本方法 文本张量表示方法 文本语料的数据分析 文本特征处理 数据增强方法 重要说明 1.2 文本处理的基本 ...
- 自然语言处理 文本预处理(下)(张量表示、文本数据分析、文本特征处理等)
文章目录 一.文本张量表示方法 1. 什么是文本张量表示 2. 文本张量表示的作用: 3. 文本张量表示的方法: 4. one-hot词向量 4.1 什么是one-hot词向量表示 4.2 one-h ...
- mfc倾斜文本输入_文本检测知识梳理(持续更新)
最近在做作业批改场景的OCR相关算法研发工作,打算梳理一下文本检测的相关知识,也欢迎大家留言讨论. 目前主流的基于深度学习的目标检测方法大体分为两类:one-stage和two-stage: 1.Tw ...
- 用文本指导文本:基于文本的自监督可控文本生成模型
论文标题: CoCon: A Self-Supervised Approach for Controlled Text Generation 论文作者: Alvin Chan, Yew-Soon On ...
- NLP:自然语言处理领域常见的文本特征表示/文本特征抽取(本质都是“数字化”)的简介、四大类方法(基于规则/基于统计,离散式【one-hot、BOW、TF-IDF】/分布式)之详细攻略
NLP:自然语言处理领域常见的文本特征表示/文本特征抽取(本质都是"数字化")的简介.四大类方法(基于规则/基于统计,离散式[one-hot.BOW.TF-IDF]/分布式[CO- ...
- ABCNet 精读:使用自适应贝塞尔曲线网络进行进行实时场景文本定位 OCR 文本定位 文本检测 CVPR
文章目录 ABCNet 导读:使用自适应贝塞尔曲线网络进行进行实时场景文本定位 ABCNet:Real-time Scene Text Spotting with Adaptive Bezier-Cu ...
- 浅谈文本生成或者文本翻译解码策略《转》
原文链接,感谢原作者 目录 一.文本生成和翻译的基本流程 翻译类模型的训练和解码 训练过程 解码过程 生成类模型的训练和解码(GPT系列) 训练过程 解码过程 二.解码策略 1.贪心搜索(greedy ...
最新文章
- CC1100E被不同频段的频率干扰问题
- 手把手教渗透测试人员打造.NET可执行文件
- 贷款100万到手97万,这样合理吗?
- STM32安装Keil5、芯片支持包、startup启动文件(启动过程分析)、建立工程、烧写
- 线性搜索c语言,线性搜索实例程序(C语言)
- caffe中的fine-tuning
- 如果工作时间固定,居住城市是可以实现的
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
- AdminLTE的介绍与使用(详细流程)-----前端框架
- Linux 中防火墙命令
- free、detele与野指针
- dex转为java_android - 将DEX反编译成Java源代码
- 网络技术大讲堂:什么是IPv6+?
- 最近看了一些东西,随便写写JFinal的一些东西吧
- 手机连接电脑 不显示android phone
- 学习Flash制作高射炮游戏
- mysql 审批表_用sql统计信贷业务审批表、逾期表(即期)
- 基本的信号——冲激信号与冲激序列
- 能够创建时间循环并飞檐走壁的 VR 游戏 TRANSPOSE正式上线
- C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试
热门文章
- 解决 k8s flannel网络 一直 Init:ImagePullBackOff和coredns状态为Pending
- 聊聊 MyBatis 中的设计模式
- 农银e管家怎么显示服务器不对,农银e管家APP
- STI解读A:STI测量方法
- GPS nmealib学习笔记 .
- BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛(10)题解
- 美颜滤镜sdk是什么?
- 4.Cantor表(升级版)
- facebook分享 whatsapp分享 点击按钮复制链接 常用js分享内容
- A type incompatibility occurred while executing org.springframework.boot:spring-boot-maven-plugin:2.