精华内容
下载资源
问答
  • xcode 创建静态和动态

    千次阅读 2014-11-24 11:51:35
    1、linux中静态和动态区别: 从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。分静态和动态两种。 静态:这类库的名字一般是libxxx.a;利用静态函数编译成的文件比较大,因为整个...

    xcode 创建静态库和动态库

    image

    1、linux中静态库和动态库区别:

    库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。

    静态库:这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。

    动态库:这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候 并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。

    2、iOS开发中静态库和动态库区别:

    静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。

    静态库 好处:

    i.模块化,分工合作,提高了代码的复用及核心技术的保密程度

    ii.避免少量改动经常导致大量的重复编译连接

    iii.也可以重用,注意不是共享使用

    动态库 好处:

    i.使用动态库,可以将最终可执行文件体积缩小,将整个应用程序分模块,团队合作,进行分工,影响比较小

    ii.使用动态库,多个应用程序共享内存中得同一份库文件,节省资源

    iii.使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。

    iv.应用插件化

    v.软件版本实时模块升级

    vi.共享可执行文件 在其它大部分平台上,动态库都可以用于不同应用间共享,这就大大节省了内存。从目前来看,iOS仍然不允许进程间共享动态库,即iOS上的动态库只能是私有的,因为我们仍然不能将动态库文件放置在除了自身沙盒以外的其它任何地方。 不过iOS8上开放了App Extension功能,可以为一个应用创建插件,这样主app和插件之间共享动态库还是可行的。

    3、xcode创建静态库

    打开Xcode, 选择File ----> New ---> Project。 新建工程。 选择iOS ----> Framework & Library ---> Cocoa Touch Static Library。 点击Next。创建工程: image

    新增2个类作为我们的一个静态类文件: image

    其中LogLib.h的代码如下:(作为公开存在) image

    LogLib.m实现方法如下,变成静态库后该文件隐藏: image

    然后选择真机进行静态库的创建:(command + B) image

    这个时候会出现如下的错误提示: image

    按照错误的提示得知我们需要在iOS8.1下build需要选择证书: image

    好了,在Product下会存在libStaticLib.a文件: image

    这只是真机下的一个静态库,同样选择模拟器,command + B,生成模拟器下的静态库。

    找到这2个新建的静态库文件: image

    分别用2个.a加入到其他项目在不同运行坏境选择不同的.a静态库明显不明智,打开终端,输入以下命令行进行整合:

    lipo -create 真机.a路径 模拟器.a路径 -output 整合的.a路径

    lipo -create /Users/fangdd/Library/Developer/Xcode/DerivedData/StaticLib-ercfdooewtvlxmakqvyxkohcagph/Build/Products/Debug-iphoneos/libStaticLib.a /Users/fangdd/Library/Developer/Xcode/DerivedData/StaticLib-ercfdooewtvlxmakqvyxkohcagph/Build/Products/Debug-iphonesimulator/libStaticLib.a -output /Users/fangdd/Desktop/staticLib.a
    

    会在 整合的.a路径下找到合体的静态库。

    将生产的静态库及相应的头文件加入到我们的测试项目中,运行得到: image

    完毕.

    4、xcode创建动态库

    打开Xcode, 选择File ----> New ---> Project。 新建工程。 选择iOS ----> Framework & Library ---> Cocoa Touch Framework。 点击Next。创建工程: image

    命名为DymicLib: image

    同样的添加新的2个类作为测试: image

    将头文件作为公共的头文件,提供给外部调用: image

    运行后变生成了一个动态库,找到Product下的DymicLib.framework所在的目录: image

    注意这个只是运行坏境下的动态库(模拟器和真机),下面建立新的TARGETS:命名为CommonDymicLib: image

    将之前生成的DymicLib加入到新的CommonDymicLib中: image

    CommonDymicLib添加新的脚本来实现模拟器和真机合并: imageimage

    脚本如下:

    # Sets the target folders and the final framework product.
    FMK_NAME=${PROJECT_NAME}
    
    # Install dir will be the final output to the framework.
    # The following line create it in the root folder of the current project.
    INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
    
    # Working dir will be deleted after the framework creation.
    WRK_DIR=build
    DEVICE_DIR=${WRK_DIR}/Release-iphoneos/$    {FMK_NAME}.framework
    SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
    
    # -configuration ${CONFIGURATION}
    # Clean and Building both architectures.
    # 分别编译生成真机和模拟器使用的framework
    xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
    xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
    
    # Cleaning the oldest.
    if [ -d "${INSTALL_DIR}" ]
    then
    rm -rf "${INSTALL_DIR}"
    fi
    
    mkdir -p "${INSTALL_DIR}"
    
    cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
    
    # Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
    # 使用lipo命令将其合并成一个通用framework
    # 最后将生成的通用framework放置在工程根目录下新建的Products目录下
    lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
    
    rm -r "${WRK_DIR}"


    选择iOS Device运行: image

    找到生成的CommonDymicLib下的动态库DymicLib.framework: image

    在测试项目中将DymicLib.framework加入: image

    运行即可!image

    心得:这个时候所谓的动态库其实意义就是升级版的静态库,因为动态库使用的前提是项目在发布前添加到项目中,这和我们所谓的插件(即插即用,随时在自己的服务器上下载一个动态库运行,而不需要重新打包,我们可以选择在需要的时候再加载动态库)完全是两码事。

    插件实现方式:使用dlopen加载动态库,动态库中真正的可执行代码为DymicLib.framework/DymicLib文件,因此使用dlopen时如果仅仅指定加载动态库的路径为DymicLib.framework是没法成功加载的。将我们创建的动态库放在我们的服务器,项目上线后再下载这个动态库到我们的Documents文件夹中,使用如下代码动态使用动态库

    #import <dlfcn.h>
    
    NSString *documentsPath = [NSString stringWithFormat:@"%@/Documents/DymicLib.framework/DymicLib",NSHomeDirectory()];
    void * libHandle = NULL;
    libHandle = dlopen([documentsPath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_NOW);
    if (libHandle == NULL) {
        char *error = dlerror();
        NSLog(@"dlopen error: %s", error);
    } else {
        NSLog(@"dlopen load framework success.");
    }


    使用  动态库 中的类:

    Class rootClass = NSClassFromString(@"DymicLog");
    if (rootClass) {
        id object = [[rootClass alloc] init];
        [(DymicLog *)object relog:@"hello world"];
    }



    展开全文
  • 几乎最全的中文NLP资源库

    千次阅读 多人点赞 2020-05-12 10:10:38
    NLP民工的乐园: 几乎最全的中文NLP资源库 词库 工具包 学习资料 在入门到熟悉NLP的过程中,用到了很多github上的包,遂整理了一下,分享在这里。 很多包非常有趣,值得收藏,满足大家的收集癖! 如果觉得有用,...

     

     

    NLP民工的乐园

    The Most Powerful NLP-Weapon Arsenal

    NLP民工的乐园: 几乎最全的中文NLP资源库

    • 词库
    • 工具包
    • 学习资料

    在入门到熟悉NLP的过程中,用到了很多github上的包,遂整理了一下,分享在这里。

    很多包非常有趣,值得收藏,满足大家的收集癖! 如果觉得有用,请分享并star,谢谢!

    长期不定时更新,欢迎watch和fork!

    涉及内容包括但不限于:中英文敏感词、语言检测、中外手机/电话归属地/运营商查询、名字推断性别、手机号抽取、身份证抽取、邮箱抽取、中日文人名库、中文缩写库、拆字词典、词汇情感值、停用词、反动词表、暴恐词表、繁简体转换、英文模拟中文发音、汪峰歌词生成器、职业名称词库、同义词库、反义词库、否定词库、汽车品牌词库、汽车零件词库、连续英文切割、各种中文词向量、公司名字大全、古诗词库、IT词库、财经词库、成语词库、地名词库、历史名人词库、诗词词库、医学词库、饮食词库、法律词库、汽车词库、动物词库、中文聊天语料、中文谣言数据、百度中文问答数据集、句子相似度匹配算法集合、bert资源、文本生成&摘要相关工具、cocoNLP信息抽取工具、国内电话号码正则匹配、清华大学XLORE:中英文跨语言百科知识图谱、清华大学人工智能技术系列报告、自然语言生成、NLU太难了系列、自动对联数据及机器人、用户名黑名单列表、罪名法务名词及分类模型、微信公众号语料、cs224n深度学习自然语言处理课程、中文手写汉字识别、中文自然语言处理 语料/数据集、变量命名神器、分词语料库+代码、任务型对话英文数据集、ASR 语音数据集 + 基于深度学习的中文语音识别系统、笑声检测器、Microsoft多语言数字/单位/如日期时间识别包、中华新华字典数据库及api(包括常用歇后语、成语、词语和汉字)、文档图谱自动生成、SpaCy 中文模型、Common Voice语音识别数据集新版、神经网络关系抽取、基于bert的命名实体识别、关键词(Keyphrase)抽取包pke、基于医疗领域知识图谱的问答系统、基于依存句法与语义角色标注的事件三元组抽取、依存句法分析4万句高质量标注数据、cnocr:用来做中文OCR的Python3包、中文人物关系知识图谱项目、中文nlp竞赛项目及代码汇总、中文字符数据、speech-aligner: 从“人声语音”及其“语言文本”产生音素级别时间对齐标注的工具、AmpliGraph: 知识图谱表示学习(Python)库:知识图谱概念链接预测、Scattertext 文本可视化(python)、语言/知识表示工具:BERT & ERNIE、中文对比英文自然语言处理NLP的区别综述、Synonyms中文近义词工具包、HarvestText领域自适应文本挖掘工具(新词发现-情感分析-实体链接等)、word2word:(Python)方便易用的多语言词-词对集:62种语言/3,564个多语言对、语音识别语料生成工具:从具有音频/字幕的在线视频创建自动语音识别(ASR)语料库、构建医疗实体识别的模型(包含词典和语料标注)、单文档非监督的关键词抽取、Kashgari中使用gpt-2语言模型、开源的金融投资数据提取工具、文本自动摘要库TextTeaser: 仅支持英文、人民日报语料处理工具集、一些关于自然语言的基本模型、基于14W歌曲知识库的问答尝试--功能包括歌词接龙and已知歌词找歌曲以及歌曲歌手歌词三角关系的问答、基于Siamese bilstm模型的相似句子判定模型并提供训练数据集和测试数据集、用Transformer编解码模型实现的根据Hacker News文章标题自动生成评论、用BERT进行序列标记和文本分类的模板代码、LitBank:NLP数据集——支持自然语言处理和计算人文学科任务的100部带标记英文小说语料、百度开源的基准信息抽取系统、虚假新闻数据集、Facebook: LAMA语言模型分析,提供Transformer-XL/BERT/ELMo/GPT预训练语言模型的统一访问接口、CommonsenseQA:面向常识的英文QA挑战、中文知识图谱资料、数据及工具、各大公司内部里大牛分享的技术文档 PDF 或者 PPT、自然语言生成SQL语句(英文)、中文NLP数据增强(EDA)工具、英文NLP数据增强工具 、基于医药知识图谱的智能问答系统、京东商品知识图谱、基于mongodb存储的军事领域知识图谱问答项目、基于远监督的中文关系抽取、语音情感分析、中文ULMFiT-情感分析-文本分类-语料及模型、一个拍照做题程序、世界各国大规模人名库、一个利用有趣中文语料库 qingyun 训练出来的中文聊天机器人、中文聊天机器人seqGAN、省市区镇行政区划数据带拼音标注、教育行业新闻语料库包含自动文摘功能、开放了对话机器人-知识图谱-语义理解-自然语言处理工具及数据、中文知识图谱:基于百度百科中文页面-抽取三元组信息-构建中文知识图谱、masr: 中文语音识别-提供预训练模型-高识别率、Python音频数据增广库、中文全词覆盖BERT及两份阅读理解数据、ConvLab:开源多域端到端对话系统平台、中文自然语言处理数据集、基于最新版本rasa搭建的对话系统、基于TensorFlow和BERT的管道式实体及关系抽取、一个小型的证券知识图谱/知识库、复盘所有NLP比赛的TOP方案、OpenCLaP:多领域开源中文预训练语言模型仓库、UER:基于不同语料+编码器+目标任务的中文预训练模型仓库、中文自然语言处理向量合集、基于金融-司法领域(兼有闲聊性质)的聊天机器人、g2pC:基于上下文的汉语读音自动标记模块、Zincbase 知识图谱构建工具包、诗歌质量评价/细粒度情感诗歌语料库、快速转化「中文数字」和「阿拉伯数字」、百度知道问答语料库、基于知识图谱的问答系统、jieba_fast 加速版的jieba、正则表达式教程、中文阅读理解数据集、基于BERT等最新语言模型的抽取式摘要提取、Python利用深度学习进行文本摘要的综合指南、知识图谱深度学习相关资料整理、维基大规模平行文本语料、StanfordNLP 0.2.0:纯Python版自然语言处理包、NeuralNLP-NeuralClassifier:腾讯开源深度学习文本分类工具、端到端的封闭域对话系统、中文命名实体识别:NeuroNER vs. BertNER、新闻事件线索抽取、2019年百度的三元组抽取比赛:“科学空间队”源码、基于依存句法的开放域文本知识三元组抽取和知识库构建、中文的GPT2训练代码、ML-NLP - 机器学习(Machine Learning)NLP面试中常考到的知识点和代码实现、nlp4han:中文自然语言处理工具集(断句/分词/词性标注/组块/句法分析/语义分析/NER/N元语法/HMM/代词消解/情感分析/拼写检查、XLM:Facebook的跨语言预训练语言模型、用基于BERT的微调和特征提取方法来进行知识图谱百度百科人物词条属性抽取、中文自然语言处理相关的开放任务-数据集-当前最佳结果、CoupletAI - 基于CNN+Bi-LSTM+Attention 的自动对对联系统、抽象知识图谱、MiningZhiDaoQACorpus - 580万百度知道问答数据挖掘项目、brat rapid annotation tool: 序列标注工具、大规模中文知识图谱数据:1.4亿实体、数据增强在机器翻译及其他nlp任务中的应用及效果、allennlp阅读理解:支持多种数据和模型、PDF表格数据提取工具 、 Graphbrain:AI开源软件库和科研工具,目的是促进自动意义提取和文本理解以及知识的探索和推断、简历自动筛选系统、基于命名实体识别的简历自动摘要、中文语言理解测评基准,包括代表性的数据集&基准模型&语料库&排行榜、树洞 OCR 文字识别 、从包含表格的扫描图片中识别表格和文字、语声迁移、Python口语自然语言处理工具集(英文)、 similarity:相似度计算工具包,java编写、海量中文预训练ALBERT模型 、Transformers 2.0 、基于大规模音频数据集Audioset的音频增强 、Poplar:网页版自然语言标注工具、图片文字去除,可用于漫画翻译 、186种语言的数字叫法库、Amazon发布基于知识的人-人开放领域对话数据集 、中文文本纠错模块代码、繁简体转换 、 Python实现的多种文本可读性评价指标、类似于人名/地名/组织机构名的命名体识别数据集 、东南大学《知识图谱》研究生课程(资料)、. 英文拼写检查库 、 wwsearch是企业微信后台自研的全文检索引擎、CHAMELEON:深度学习新闻推荐系统元架构 、 8篇论文梳理BERT相关模型进展与反思、DocSearch:免费文档搜索引擎、 LIDA:轻量交互式对话标注工具 、aili - the fastest in-memory index in the East 东半球最快并发索引 、知识图谱车音工作项目、自然语言生成资源大全 、中日韩分词库mecab的Python接口库、中文文本摘要/关键词提取、汉字字符特征提取器 (featurizer),提取汉字的特征(发音特征、字形特征)用做深度学习的特征、中文生成任务基准测评 、中文缩写数据集、中文任务基准测评 - 代表性的数据集-基准(预训练)模型-语料库-baseline-工具包-排行榜、PySS3:面向可解释AI的SS3文本分类器机器可视化工具 、中文NLP数据集列表、COPE - 格律诗编辑程序、doccano:基于网页的开源协同多语言文本标注工具 、PreNLP:自然语言预处理库、简单的简历解析器,用来从简历中提取关键信息、用于中文闲聊的GPT2模型:GPT2-chitchat、基于检索聊天机器人多轮响应选择相关资源列表(Leaderboards、Datasets、Papers)、(Colab)抽象文本摘要实现集锦(教程 、词语拼音数据、高效模糊搜索工具、NLP数据增广资源集、微软对话机器人框架 、 GitHub Typo Corpus:大规模GitHub多语言拼写错误/语法错误数据集、TextCluster:短文本聚类预处理模块 Short text cluster、面向语音识别的中文文本规范化、BLINK:最先进的实体链接库、BertPunc:基于BERT的最先进标点修复模型、Tokenizer:快速、可定制的文本词条化库、中文语言理解测评基准,包括代表性的数据集、基准(预训练)模型、语料库、排行榜、spaCy 医学文本挖掘与信息提取 、 NLP任务示例项目代码集、 python拼写检查库、chatbot-list - 行业内关于智能客服、聊天机器人的应用和架构、算法分享和介绍、语音质量评价指标(MOSNet, BSSEval, STOI, PESQ, SRMR)、 用138GB语料训练的法文RoBERTa预训练语言模型 、BERT-NER-Pytorch:三种不同模式的BERT中文NER实验、无道词典 - 有道词典的命令行版本,支持英汉互查和在线查询、2019年NLP亮点回顾、 Chinese medical dialogue data 中文医疗对话数据集 、最好的汉字数字(中文数字)-阿拉伯数字转换工具、 基于百科知识库的中文词语多词义/义项获取与特定句子词语语义消歧、awesome-nlp-sentiment-analysis - 情感分析、情绪原因识别、评价对象和评价词抽取、LineFlow:面向所有深度学习框架的NLP数据高效加载器、中文医学NLP公开资源整理 、MedQuAD:(英文)医学问答数据集、将自然语言数字串解析转换为整数和浮点数、Transfer Learning in Natural Language Processing (NLP) 、面向语音识别的中文/英文发音辞典、Tokenizers:注重性能与多功能性的最先进分词器、CLUENER 细粒度命名实体识别 Fine Grained Named Entity Recognition、 基于BERT的中文命名实体识别、中文谣言数据库、NLP数据集/基准任务大列表、nlp相关的一些论文及代码, 包括主题模型、词向量(Word Embedding)、命名实体识别(NER)、文本分类(Text Classificatin)、文本生成(Text Generation)、文本相似性(Text Similarity)计算等,涉及到各种与nlp相关的算法,基于keras和tensorflow 、Python文本挖掘/NLP实战示例、 Blackstone:面向非结构化法律文本的spaCy pipeline和NLP模型通过同义词替换实现文本“变脸” 、中文 预训练 ELECTREA 模型: 基于对抗学习 pretrain Chinese Model 、albert-chinese-ner - 用预训练语言模型ALBERT做中文NER 、基于GPT2的特定主题文本生成/文本增广、开源预训练语言模型合集、多语言句向量包、编码、标记和实现:一种可控高效的文本生成方法、 英文脏话大列表 、attnvis:GPT2、BERT等transformer语言模型注意力交互可视化、CoVoST:Facebook发布的多语种语音-文本翻译语料库,包括11种语言(法语、德语、荷兰语、俄语、西班牙语、意大利语、土耳其语、波斯语、瑞典语、蒙古语和中文)的语音、文字转录及英文译文、Jiagu自然语言处理工具 - 以BiLSTM等模型为基础,提供知识图谱关系抽取 中文分词 词性标注 命名实体识别 情感分析 新词发现 关键词 文本摘要 文本聚类等功能、用unet实现对文档表格的自动检测,表格重建、NLP事件提取文献资源列表 、 金融领域自然语言处理研究资源大列表、CLUEDatasetSearch - 中英文NLP数据集:搜索所有中文NLP数据集,附常用英文NLP数据集 、medical_NER - 中文医学知识图谱命名实体识别 、(哈佛)讲因果推理的免费书、知识图谱相关学习资料/数据集/工具资源大列表、Forte:灵活强大的自然语言处理pipeline工具集 、Python字符串相似性算法库、PyLaia:面向手写文档分析的深度学习工具包、TextFooler:针对文本分类/推理的对抗文本生成模块、Haystack:灵活、强大的可扩展问答(QA)框架、中文关键短语抽取工具


    1. textfilter: 中英文敏感词过滤 observerss/textfilter

     >>> f = DFAFilter()
     >>> f.add("sexy")
     >>> f.filter("hello sexy baby")
     hello **** baby
    

    敏感词包括政治、脏话等话题词汇。其原理主要是基于词典的查找(项目中的keyword文件),内容很劲爆。。。

    2. langid:97种语言检测 https://github.com/saffsd/langid.py

    pip install langid

    >>> import langid
    >>> langid.classify("This is a test")
    ('en', -54.41310358047485)
    

    3. langdetect:另一个语言检测https://code.google.com/archive/p/language-detection/

    pip install langdetect

    from langdetect import detect
    from langdetect import detect_langs
    
    s1 = "本篇博客主要介绍两款语言探测工具,用于区分文本到底是什么语言,"
    s2 = 'We are pleased to introduce today a new technology'
    print(detect(s1))
    print(detect(s2))
    print(detect_langs(s3))    # detect_langs()输出探测出的所有语言类型及其所占的比例
    

    输出结果如下: 注:语言类型主要参考的是ISO 639-1语言编码标准,详见ISO 639-1百度百科

    跟上一个语言检测比较,准确率低,效率高。

    4. phone 中国手机归属地查询: ls0f/phone

    已集成到 python package cocoNLP中,欢迎试用

    from phone import Phone
    p  = Phone()
    p.find(18100065143)
    #return {'phone': '18100065143', 'province': '上海', 'city': '上海', 'zip_code': '200000', 'area_code': '021', 'phone_type': '电信'}
    

    支持号段: 13*,15*,18*,14[5,7],17[0,6,7,8]

    记录条数: 360569 (updated:2017年4月)

    作者提供了数据phone.dat 方便非python用户Load数据。

    5. phone国际手机、电话归属地查询:AfterShip/phone

    npm install phone

    import phone from 'phone';
    phone('+852 6569-8900'); // return ['+85265698900', 'HKG']
    phone('(817) 569-8900'); // return ['+18175698900, 'USA']
    

    6. ngender 根据名字判断性别:observerss/ngender 基于朴素贝叶斯计算的概率

    pip install ngender

    >>> import ngender
    >>> ngender.guess('赵本山')
    ('male', 0.9836229687547046)
    >>> ngender.guess('宋丹丹')
    ('female', 0.9759486128949907)
    

    7. 抽取email的正则表达式

    已集成到 python package cocoNLP中,欢迎试用

    email_pattern = '^[*#\u4e00-\u9fa5 a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$'
    emails = re.findall(email_pattern, text, flags=0)
    

    8. 抽取phone_number的正则表达式

    已集成到 python package cocoNLP中,欢迎试用

    cellphone_pattern = '^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$'
    phoneNumbers = re.findall(cellphone_pattern, text, flags=0)
    

    9. 抽取身份证号的正则表达式

    IDCards_pattern = r'^([1-9]\d{5}[12]\d{3}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])\d{3}[0-9xX])$'
    IDs = re.findall(IDCards_pattern, text, flags=0)
    

    10. 人名语料库: wainshine/Chinese-Names-Corpus

    人名抽取功能 python package cocoNLP,欢迎试用

    中文(现代、古代)名字、日文名字、中文的姓和名、称呼(大姨妈、小姨妈等)、英文->中文名字(李约翰)、成语词典
    

    (可用于中文分词、姓名识别)

    11. 中文缩写库:github

    全国人大: 全国/n 人民/n 代表大会/n
    中国: 中华人民共和国/ns
    女网赛: 女子/n 网球/n 比赛/vn
    

    12. 汉语拆字词典:kfcd/chaizi

    漢字	拆法 (一)	拆法 (二)	拆法 (三)
    拆	手 斥	扌 斥	才 斥
    

    13. 词汇情感值:rainarch/SentiBridge

    山泉水	充沛	0.400704566541	0.370067395878
    视野	        宽广	0.305762728932	0.325320747491
    大峡谷	惊险	0.312137906517	0.378594957281
    

    14. 中文词库、停用词、敏感词 dongxiexidian/Chinese

    此package的敏感词库分类更细:

    反动词库, 敏感词库表统计, 暴恐词库, 民生词库, 色情词库

    15. 汉字转拼音:mozillazg/python-pinyin

    文本纠错会用到

    16. 中文繁简体互转:skydark/nstools

    17. 英文模拟中文发音引擎 funny chinese text to speech enginee:tinyfool/ChineseWithEnglish

    say wo i ni
    #说:我爱你
    

    相当于用英文音标,模拟中文发音。

    18. 汪峰歌词生成器:phunterlau/wangfeng-rnn

    我在这里中的夜里
    就像一场是一种生命的意旪
    就像我的生活变得在我一样
    可我们这是一个知道
    我只是一天你会怎吗
    

    19. 同义词库、反义词库、否定词库:guotong1988/chinese_dictionary

    20. 无空格英文串分割、抽取单词:wordninja

    >>> import wordninja
    >>> wordninja.split('derekanderson')
    ['derek', 'anderson']
    >>> wordninja.split('imateapot')
    ['im', 'a', 'teapot']
    

    21. IP地址正则表达式:

    (25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)
    

    22. 腾讯QQ号正则表达式:

    [1-9]([0-9]{5,11})
    

    23. 国内固话号码正则表达式:

    [0-9-()()]{7,18}
    

    24. 用户名正则表达式:

    [A-Za-z0-9_\-\u4e00-\u9fa5]+
    

    25. 汽车品牌、汽车零件相关词汇:

    见本repo的data文件 [data](https://github.com/fighting41love/funNLP/tree/master/data)
    

    26. 时间抽取:

    已集成到 python package cocoNLP中,欢迎试用

    在2016年6月7日9:44执行測試,结果如下
    
    Hi,all。下周一下午三点开会
    
    >> 2016-06-13 15:00:00-false
    
    周一开会
    
    >> 2016-06-13 00:00:00-true
    
    下下周一开会
    
    >> 2016-06-20 00:00:00-true
    

    java version

    python version

    27. 各种中文词向量: github repo

    中文词向量大全

    28. 公司名字大全: github repo

    29. 古诗词库: github repo 更全的古诗词库

    30. THU整理的词库: link

    已整理到本repo的data文件夹中.

    IT词库、财经词库、成语词库、地名词库、历史名人词库、诗词词库、医学词库、饮食词库、法律词库、汽车词库、动物词库
    

    31. 中文聊天语料 link

    该库搜集了包含:豆瓣多轮, PTT八卦语料, 青云语料, 电视剧对白语料, 贴吧论坛回帖语料,微博语料,小黄鸡语料
    

    32. 中文谣言数据: github

    该数据文件中,每一行为一条json格式的谣言数据,字段释义如下:
    
    rumorCode: 该条谣言的唯一编码,可以通过该编码直接访问该谣言举报页面。
    title: 该条谣言被举报的标题内容
    informerName: 举报者微博名称
    informerUrl: 举报者微博链接
    rumormongerName: 发布谣言者的微博名称
    rumormongerUr: 发布谣言者的微博链接
    rumorText: 谣言内容
    visitTimes: 该谣言被访问次数
    result: 该谣言审查结果
    publishTime: 该谣言被举报时间
    

    33. 情感波动分析:github

    词库已整理到本repo的data文件夹中.

    本repo项目是一个通过与人对话获得其情感值波动图谱, 内用词库在data文件夹中.
    

    34. 中文问答数据集链接 提取码: 2dva

    35. 句子、QA相似度匹配:MatchZoo github

    文本相似度匹配算法的集合,包含多个深度学习的方法,值得尝试。

    36. bert资源:

    • bert论文中文翻译: link
    • bert原作者的slides: link 提取码: iarj

    • 文本分类实践: github

    • bert tutorial文本分类教程: github

    • bert pytorch实现: github

    • bert用于中文命名实体识别 tensorflow版本: github

    • BERT生成句向量,BERT做文本分类、文本相似度计算github

    • bert 基于 keras 的封装分类标注框架 Kashgari,几分钟即可搭建一个分类或者序列标注模型: github

    • bert、ELMO的图解: github

    • BERT: Pre-trained models and downstream applications: github

    37. Texar - Toolkit for Text Generation and Beyondgithub

    • 基于Tensorflow的开源工具包,旨在支持广泛的机器学习,特别是文本生成任务,如机器翻译、对话、摘要、内容处置、语言建模等

    38. 中文事件抽取: github

    • 中文复合事件抽取,包括条件事件、因果事件、顺承事件、反转事件等事件抽取,并形成事理图谱。

    39. cocoNLP: github

    人名、地址、邮箱、手机号、手机归属地 等信息的抽取,rake短语抽取算法。

    pip install cocoNLP

    >>> from cocoNLP.extractor import extractor
    
    >>> ex = extractor()
    
    >>> text = '急寻特朗普,男孩,于2018年11月27号11时在陕西省安康市汉滨区走失。丢失发型短发,...如有线索,请迅速与警方联系:18100065143,132-6156-2938,baizhantang@sina.com.cn 和yangyangfuture at gmail dot com'
    
    # 抽取邮箱
    >>> emails = ex.extract_email(text)
    >>> print(emails)
    
    ['baizhantang@sina.com.cn', 'yangyangfuture@gmail.com.cn']
    # 抽取手机号
    >>> cellphones = ex.extract_cellphone(text,nation='CHN')
    >>> print(cellphones)
    
    ['18100065143', '13261562938']
    # 抽取手机归属地、运营商
    >>> cell_locs = [ex.extract_cellphone_location(cell,'CHN') for cell in cellphones]
    >>> print(cell_locs)
    
    cellphone_location [{'phone': '18100065143', 'province': '上海', 'city': '上海', 'zip_code': '200000', 'area_code': '021', 'phone_type': '电信'}]
    # 抽取地址信息
    >>> locations = ex.extract_locations(text)
    >>> print(locations)
    ['陕西省安康市汉滨区', '安康市汉滨区', '汉滨区']
    # 抽取时间点
    >>> times = ex.extract_time(text)
    >>> print(times)
    time {"type": "timestamp", "timestamp": "2018-11-27 11:00:00"}
    # 抽取人名
    >>> name = ex.extract_name(text)
    >>> print(name)
    特朗普
    
    

    40. 国内电话号码正则匹配(三大运营商+虚拟等): github

    41. 清华大学XLORE:中英文跨语言百科知识图谱: link
    上述链接中包含了所有实体及关系的TTL文件,更多数据将在近期发布。 概念,实例,属性和上下位关系数目

      百度 中文维基 英文维基 总数
    概念数量 32,009 150,241 326,518 508,768
    实例数量 1,629,591 640,622 1,235,178 3,505,391
    属性数量 157,370 45,190 26,723 229.283
    InstanceOf 7,584,931 1,449,925 3,032,515 12,067,371
    SubClassOf 2,784 191,577 555,538 749,899

    跨语言连接(概念/实例)

      百度 中文维基 英文维基
    百度 - 10,216/336,890 4,846/303,108
    中文维基 10,216/336,890 - 28,921/454,579
    英文维基 4,846/303,108 28,921/454,579 -

    42. 清华大学人工智能技术系列报告: link
    每年会出AI领域相关的报告,内容包含

    • 自然语言处理 link
    • 知识图谱 link
    • 数据挖掘 link
    • 自动驾驶 link
    • 机器翻译 link
    • 区块链 link
    • 机器人 link
    • 计算机图形学 link
    • 3D打印 link
    • 人脸识别 link
    • 人工智能芯片 link
    • 等等

    43.自然语言生成方面:

    44.: jiebahanlp就不必介绍了吧。

    45.NLP太难了系列: github

    • 来到杨过曾经生活过的地方,小龙女动情地说:“我也想过过过儿过过的生活。” ​​​
    • 来到儿子等校车的地方,邓超对孙俪说:“我也想等等等等等过的那辆车。”
    • 赵敏说:我也想控忌忌己不想无忌。
    • 你也想犯范范范玮琪犯过的错吗
    • 对叙打击是一次性行为?

    46.自动对联数据及机器人:
    70万对联数据 link
    代码 link

    上联 下联
    殷勤怕负三春意 潇洒难书一字愁
    如此清秋何吝酒 这般明月不须钱

    47.用户名黑名单列表: github 包含了用户名禁用列表,比如: link

    administrator
    administration
    autoconfig
    autodiscover
    broadcasthost
    domain
    editor
    guest
    host
    hostmaster
    info
    keybase.txt
    localdomain
    localhost
    master
    mail
    mail0
    mail1
    

    48.罪名法务名词及分类模型: github

    包含856项罪名知识图谱, 基于280万罪名训练库的罪名预测,基于20W法务问答对的13类问题分类与法律资讯问答功能
    

    49.微信公众号语料: github

    3G语料,包含部分网络抓取的微信公众号的文章,已经去除HTML,只包含了纯文本。每行一篇,是JSON格式,name是微信公众号名字,account是微信公众号ID,title是题目,content是正文

    50.cs224n深度学习自然语言处理课程:link

    • 课程中模型的pytorch实现 link
    • 面向深度学习研究人员的自然语言处理实例教程 link

    51.中文手写汉字识别:github

    52.中文自然语言处理 语料/数据集:github 竞品:THUOCL(THU Open Chinese Lexicon)中文词库

    53.变量命名神器:github link

    54.分词语料库+代码:百度网盘链接

    55. NLP新书推荐《Natural Language Processing》by Jacob Eisenstein: link

    56. 任务型对话英文数据集: github
    【最全任务型对话数据集】主要介绍了一份任务型对话数据集大全,这份数据集大全涵盖了到目前在任务型对话领域的所有常用数据集的主要信息。此外,为了帮助研究者更好的把握领域进展的脉络,我们以Leaderboard的形式给出了几个数据集上的State-of-the-art实验结果。

    57. ASR 语音数据集 + 基于深度学习的中文语音识别系统: github

    58. 笑声检测器: github

    59. Microsoft多语言数字/单位/如日期时间识别包: [github](https://github.com/Microsoft/Recognizers-Text

    60. chinese-xinhua 中华新华字典数据库及api,包括常用歇后语、成语、词语和汉字 github

    61. 文档图谱自动生成 github

    • TextGrapher - Text Content Grapher based on keyinfo extraction by NLP method。输入一篇文档,将文档进行关键信息提取,进行结构化,并最终组织成图谱组织形式,形成对文章语义信息的图谱化展示

    62. SpaCy 中文模型 github

    • 包含Parser, NER, 语法树等功能。有一些英文package使用spacy的英文模型的,如果要适配中文,可能需要使用spacy中文模型。

    63. Common Voice语音识别数据集新版 link

    • 包括来自42,000名贡献者超过1,400小时的语音样本,涵github

    64. 神经网络关系抽取 pytorch github

    • 暂不支持中文

    65. 基于bert的命名实体识别 pytorch github

    • 暂不支持中文

    66. 关键词(Keyphrase)抽取包 pke github
    pke: an open source python-based keyphrase extraction toolkit

    • 暂不支持中文,我于近期对其进行修改,使其适配中文。 请关注我的github动态,谢谢!

    67. 基于医疗领域知识图谱的问答系统 github

    68. 基于依存句法与语义角色标注的事件三元组抽取 github

    69. 依存句法分析4万句高质量标注数据 by 苏州大学汉语依存树库(SUCDT) Homepage 数据下载详见homepage底部,需要签署协议,需要邮件接收解压密码。

    70. cnocr:用来做中文OCR的Python3包,自带了训练好的识别模型 github

    71. 中文人物关系知识图谱项目 github

    • 中文人物关系图谱构建
    • 基于知识库的数据回标
    • 基于远程监督与bootstrapping方法的人物关系抽取
    • 基于知识图谱的知识问答等应用

    72. 中文nlp竞赛项目及代码汇总 github

    • 文本生成、文本摘要:Byte Cup 2018 国际机器学习竞赛
    • 知识图谱:瑞金医院MMC人工智能辅助构建知识图谱大赛
    • 视频识别 问答:2018之江杯全球人工智能大赛
:视频识别&问答

    73. 中文字符数据 github

    • 简/繁体汉字笔顺
    • 矢量笔画

    74. speech-aligner: 从“人声语音”及其“语言文本”,产生音素级别时间对齐标注的工具 github

    75. AmpliGraph: 知识图谱表示学习(Python)库:知识图谱概念链接预测 github

    • 埃森哲出品,目前尚不支持中文

    76. Scattertext 文本可视化(python) github

    • 很好用的工具包,简单修改后可支持中文
    • 能否分析出某个类别的文本与其他文本的用词差异

    77. 语言/知识表示工具:BERT & ERNIE github

    • 百度出品,ERNIE也号称在多项nlp任务中击败了bert

    78. 中文对比英文自然语言处理NLP的区别综述 link

    79. Synonyms中文近义词工具包 github

    • Synonyms 中文近义词工具包,可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等

    80. HarvestText领域自适应文本挖掘工具(新词发现-情感分析-实体链接等) github

    81. word2word:(Python)方便易用的多语言词-词对集:62种语言/3,564个多语言对 github

    82. 语音识别语料生成工具:从具有音频/字幕的在线视频创建自动语音识别(ASR)语料库 github

    83. ASR语音大辞典/词典: github

    84. 构建医疗实体识别的模型,包含词典和语料标注,基于python: github

    85. 单文档非监督的关键词抽取: github

    86. Kashgari中使用gpt-2语言模型 github

    87. 开源的金融投资数据提取工具 github

    88. 文本自动摘要库TextTeaser: 仅支持英文 github

    89. 人民日报语料处理工具集 github

    90. 一些关于自然语言的基本模型 github

    91. 基于14W歌曲知识库的问答尝试,功能包括歌词接龙,已知歌词找歌曲以及歌曲歌手歌词三角关系的问答 github

    92. 基于Siamese bilstm模型的相似句子判定模型,提供训练数据集和测试数据集 github

    • 提供了10万个训练样本

    93. 用Transformer编解码模型实现的根据Hacker News文章标题自动生成评论 github

    94. 用BERT进行序列标记和文本分类的模板代码 github

    95. LitBank:NLP数据集——支持自然语言处理和计算人文学科任务的100部带标记英文小说语料 github

    96. 百度开源的基准信息抽取系统 github

    97. 虚假新闻数据集 fake news corpus github

    98. Facebook: LAMA语言模型分析,提供Transformer-XL/BERT/ELMo/GPT预训练语言模型的统一访问接口 github

    99. CommonsenseQA:面向常识的英文QA挑战 link

    100. 中文知识图谱资料、数据及工具 github

    101. 各大公司内部里大牛分享的技术文档 PDF 或者 PPT github

    102. 自然语言生成SQL语句(英文) github

    103. 中文NLP数据增强(EDA)工具 github

    •  英文NLP数据增强工具 github

    104. 基于医药知识图谱的智能问答系统 github

    105. 京东商品知识图谱 github

    • 基于京东网站的1300种商品上下级概念,约10万商品品牌,约65万品牌销售关系,商品描述维度等知识库,基于该知识库可以支持商品属性库构建,商品销售问答,品牌物品生产等知识查询服务,也可用于情感分析等下游应用.

    106. 基于mongodb存储的军事领域知识图谱问答项目 github

    • 基于mongodb存储的军事领域知识图谱问答项目,包括飞行器、太空装备等8大类,100余小类,共计5800项的军事武器知识库,该项目不使用图数据库进行存储,通过jieba进行问句解析,问句实体项识别,基于查询模板完成多类问题的查询,主要是提供一种工业界的问答思想demo。

    107. 基于远监督的中文关系抽取 github

    108. 语音情感分析 github

    109. 中文ULMFiT 情感分析 文本分类 语料及模型 github

    110. 一个拍照做题程序。输入一张包含数学计算题的图片,输出识别出的数学计算式以及计算结果 github

    111. 世界各国大规模人名库 github

    112. 一个利用有趣中文语料库 qingyun 训练出来的中文聊天机器人 github

    • 使用了青云语料10万语料,本repo中也有该语料的链接

    113. 中文聊天机器人, 根据自己的语料训练出自己想要的聊天机器人,可以用于智能客服、在线问答、智能聊天等场景 github

    • 根据自己的语料训练出自己想要的聊天机器人,可以用于智能客服、在线问答、智能聊天等场景。加入seqGAN版本。
    • repo中提供了一份质量不太高的语料

    114. 省市区镇行政区划数据带拼音标注 github

    • 国家统计局中的省市区镇行政区划数据带拼音标注,高德地图的坐标和行政区域边界范围,在浏览器里面运行js代码采集的2019年发布的最新数据,含采集源码,提供csv格式数据,支持csv转成省市区多级联动js代码
    • 坐标、边界范围、名称、拼音、行政区等多级地址

    115. 教育行业新闻 自动文摘 语料库 github

    116. 开放了对话机器人、知识图谱、语义理解、自然语言处理工具及数据 github

    117. 中文知识图谱:基于百度百科中文页面,抽取三元组信息,构建中文知识图谱 github

    118. masr: 中文语音识别,提供预训练模型,高识别率 github

    119. Python音频数据增广库 github

    120. 中文全词覆盖BERT及两份阅读理解数据 github

    • DRCD数据集由中国台湾台达研究院发布,其形式与SQuAD相同,是基于繁体中文的抽取式阅读理解数据集。
    • CMRC 2018数据集是哈工大讯飞联合实验室发布的中文机器阅读理解数据。根据给定问题,系统需要从篇章中抽取出片段作为答案,形式与SQuAD相同。

    121. ConvLab:开源多域端到端对话系统平台 github

    122. 中文自然语言处理数据集 github

    123. 基于最新版本rasa搭建的对话系统 github

    124. 基于TensorFlow和BERT的管道式实体及关系抽取 github

    • Entity and Relation Extraction Based on TensorFlow and BERT. 基于TensorFlow和BERT的管道式实体及关系抽取,2019语言与智能技术竞赛信息抽取任务解决方案。Schema based Knowledge Extraction, SKE 2019

    125. 一个小型的证券知识图谱/知识库 github

    126. 复盘所有NLP比赛的TOP方案 github

    127. OpenCLaP:多领域开源中文预训练语言模型仓库 github 包含如下语言模型及百度百科数据

    • 民事文书BERT bert-base 全部民事文书 2654万篇文书 22554词 370MB
    • 刑事文书BERT bert-base 全部刑事文书 663万篇文书 22554词 370MB
    • 百度百科BERT bert-base 百度百科 903万篇词条 22166词 367MB

    128. UER:基于不同语料、编码器、目标任务的中文预训练模型仓库(包括BERT、GPT、ELMO等) github

    • 基于PyTorch的预训练模型框架,支持对编码器,目标任务等进行任意的组合,从而复现已有的预训练模型,或在已有的预训练模型上进一步改进。基于UER训练了不同性质的预训练模型(不同语料、编码器、目标任务),构成了中文预训练模型仓库,适用于不同的场景。

    129. 中文自然语言处理向量合集 github

    • 包括字向量,拼音向量,词向量,词性向量,依存关系向量.共5种类型的向量

    130. 基于金融-司法领域(兼有闲聊性质)的聊天机器人 github

    • 其中的主要模块有信息抽取、NLU、NLG、知识图谱等,并且利用Django整合了前端展示,目前已经封装了nlp和kg的restful接口

    131. g2pC:基于上下文的汉语读音自动标记模块 github

    132. Zincbase 知识图谱构建工具包 github

    133. 诗歌质量评价/细粒度情感诗歌语料库 github

    134. 快速转化「中文数字」和「阿拉伯数字」 github

    • 中文、阿拉伯数字互转
    • 中文与阿拉伯数字混合的情况,在开发中

    135. 百度知道问答语料库 github

    • 超过580万的问题,938万的答案,5800个分类标签。基于该问答语料库,可支持多种应用,如闲聊问答,逻辑挖掘

    136. 基于知识图谱的问答系统 github

    • BERT做命名实体识别和句子相似度,分为online和outline模式

    137. jieba_fast 加速版的jieba github

    • 使用cpython重写了jieba分词库中计算DAG和HMM中的vitrebi函数,速度得到大幅提升

    138. 正则表达式教程 github

    139. 中文阅读理解数据集 github

    140. 基于BERT等最新语言模型的抽取式摘要提取 github

    141. Python利用深度学习进行文本摘要的综合指南 link

    142. 知识图谱深度学习相关资料整理 github

    • 深度学习与自然语言处理、知识图谱、对话系统。包括知识获取、知识库构建、知识库应用三大技术研究与应用

    143. 维基大规模平行文本语料 github

    • 85种语言、1620种语言对、135M对照句

    144. StanfordNLP 0.2.0:纯Python版自然语言处理包 link

    145. NeuralNLP-NeuralClassifier:腾讯开源深度学习文本分类工具 github

    146. 端到端的封闭域对话系统 github

    147. 中文命名实体识别:NeuroNER vs. BertNER github

    148. 新闻事件线索抽取 github

    • An exploration for Eventline (important news Rank organized by pulic time),针对某一事件话题下的新闻报道集合,通过使用docrank算法,对新闻报道进行重要性识别,并通过新闻报道时间挑选出时间线上重要新闻

    149. 2019年百度的三元组抽取比赛,“科学空间队”源码(第7名) github

    150. 基于依存句法的开放域文本知识三元组抽取和知识库构建 github

    151. 中文的GPT2训练代码 github

    152. ML-NLP - 机器学习(Machine Learning)、NLP面试中常考到的知识点和代码实现 github

    153. nlp4han:中文自然语言处理工具集(断句/分词/词性标注/组块/句法分析/语义分析/NER/N元语法/HMM/代词消解/情感分析/拼写检查 github

    154. XLM:Facebook的跨语言预训练语言模型 github

    155. 用基于BERT的微调和特征提取方法来进行知识图谱百度百科人物词条属性抽取 github

    156. 中文自然语言处理相关的开放任务,数据集, 以及当前最佳结果 github

    157. CoupletAI - 基于CNN+Bi-LSTM+Attention 的自动对对联系统 github

    158. 抽象知识图谱,目前规模50万,支持名词性实体、状态性描述、事件性动作进行抽象 github

    159. MiningZhiDaoQACorpus - 580万百度知道问答数据挖掘项目 github

    160. brat rapid annotation tool: 序列标注工具 link

    161. 大规模中文知识图谱数据::1.4亿实体 github

    162. 数据增强在机器翻译及其他nlp任务中的应用及效果 link

    163. allennlp阅读理解:支持多种数据和模型 github

    164. PDF表格数据提取工具 github

    165. Graphbrain:AI开源软件库和科研工具,目的是促进自动意义提取和文本理解以及知识的探索和推断 github

    166. 简历自动筛选系统 github

    167. 基于命名实体识别的简历自动摘要 github

    168. 中文语言理解测评基准,包括代表性的数据集&基准模型&语料库&排行榜 github

    169. 树洞 OCR 文字识别 github

    170. 从包含表格的扫描图片中识别表格和文字 github

    171. 语声迁移 github

    172. Python口语自然语言处理工具集(英文) github

    173. similarity:相似度计算工具包,java编写 github

    • 用于词语、短语、句子、词法分析、情感分析、语义分析等相关的相似度计算

    174. 海量中文预训练ALBERT模型 github

    175. Transformers 2.0 github

    • 支持TensorFlow 2.0 和 PyTorch 的自然语言处理预训练语言模型(BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet…) 8种架构/33种预训练模型/102种语言

    176. 基于大规模音频数据集Audioset的音频增强 github

    177. Poplar:网页版自然语言标注工具 github

    178. 图片文字去除,可用于漫画翻译 github

    179. 186种语言的数字叫法库 github

    180. Amazon发布基于知识的人-人开放领域对话数据集 github

    181. 中文文本纠错模块代码 github

    182. 繁简体转换 github

    183. Python实现的多种文本可读性评价指标 github

    184. 类似于人名/地名/组织机构名的命名体识别数据集 github

    185. 东南大学《知识图谱》研究生课程(资料) github

    186. 英文拼写检查库 github

    from spellchecker import SpellChecker
    
    spell = SpellChecker()
    
    # find those words that may be misspelled
    misspelled = spell.unknown(['something', 'is', 'hapenning', 'here'])
    
    for word in misspelled:
        # Get the one `most likely` answer
        print(spell.correction(word))
    
        # Get a list of `likely` options
        print(spell.candidates(word))
    

    187. wwsearch是企业微信后台自研的全文检索引擎 github

    188. CHAMELEON:深度学习新闻推荐系统元架构 github

    189. 8篇论文梳理BERT相关模型进展与反思 github

    190. DocSearch:免费文档搜索引擎 github

    191. LIDA:轻量交互式对话标注工具 github

    192. aili - the fastest in-memory index in the East 东半球最快并发索引 github

    193. 知识图谱车音工作项目 github

    194. 自然语言生成资源大全 github

    • 内含英文数据、论文、代码

    195. 中日韩分词库mecab的Python接口库 github

    196. 中文文本摘要/关键词提取 github

    197. 汉字字符特征提取器 (featurizer),提取汉字的特征(发音特征、字形特征)用做深度学习的特征 github

    198. 中文生成任务基准测评 github

    199. 中文缩写数据集 github

    200. 中文任务基准测评 - 代表性的数据集-基准(预训练)模型-语料库-baseline-工具包-排行榜 github

    201. PySS3:面向可解释AI的SS3文本分类器机器可视化工具 github

    202. 中文NLP数据集列表 github

    203. COPE - 格律诗编辑程序 github

    204. doccano:基于网页的开源协同多语言文本标注工具 github

    205. PreNLP:自然语言预处理库 github

    206. 简单的简历解析器,用来从简历中提取关键信息 github

    207. 用于中文闲聊的GPT2模型:GPT2-chitchat github

    208. 基于检索聊天机器人多轮响应选择相关资源列表(Leaderboards、Datasets、Papers) github

    209. (Colab)抽象文本摘要实现集锦(教程 github

    210. 词语拼音数据 github

    211. 高效模糊搜索工具 github

    212. NLP数据增广资源集 github

    213. 微软对话机器人框架 github

    214. GitHub Typo Corpus:大规模GitHub多语言拼写错误/语法错误数据集 github

    215. TextCluster:短文本聚类预处理模块 Short text cluster github

    216. 面向语音识别的中文文本规范化 github

    217. BLINK:最先进的实体链接库 github

    218. BertPunc:基于BERT的最先进标点修复模型 github

    219. Tokenizer:快速、可定制的文本词条化库 github

    220. 中文语言理解测评基准,包括代表性的数据集、基准(预训练)模型、语料库、排行榜 github

    221. spaCy 医学文本挖掘与信息提取 github

    222. NLP任务示例项目代码集 github

    223. python拼写检查库 github

    224. chatbot-list - 行业内关于智能客服、聊天机器人的应用和架构、算法分享和介绍 github

    225. 语音质量评价指标(MOSNet, BSSEval, STOI, PESQ, SRMR) github

    226. 用138GB语料训练的法文RoBERTa预训练语言模型 link

    227. BERT-NER-Pytorch:三种不同模式的BERT中文NER实验 github

    228. 无道词典 - 有道词典的命令行版本,支持英汉互查和在线查询 github

    229. 2019年NLP亮点回顾 download

    • 提取码: yb6x

    230. Chinese medical dialogue data 中文医疗对话数据集 github

    231. 最好的汉字数字(中文数字)-阿拉伯数字转换工具 github

    232. 基于百科知识库的中文词语多词义/义项获取与特定句子词语语义消歧 github

    233. awesome-nlp-sentiment-analysis - 情感分析、情绪原因识别、评价对象和评价词抽取 github

    234. LineFlow:面向所有深度学习框架的NLP数据高效加载器 github

    235. 中文医学NLP公开资源整理 github

    236. MedQuAD:(英文)医学问答数据集 github

    237. 将自然语言数字串解析转换为整数和浮点数 github

    238. Transfer Learning in Natural Language Processing (NLP) youtube

    239. 面向语音识别的中文/英文发音辞典 github

    240. Tokenizers:注重性能与多功能性的最先进分词器 github

    241. CLUENER 细粒度命名实体识别 Fine Grained Named Entity Recognition github

    242. 基于BERT的中文命名实体识别 github

    243. 中文谣言数据库 github

    244. NLP数据集/基准任务大列表 github

    • 大多数为英文数据

    245. nlp相关的一些论文及代码, 包括主题模型、词向量(Word Embedding)、命名实体识别(NER)、文本分类(Text Classificatin)、文本生成(Text Generation)、文本相似性(Text Similarity)计算等,涉及到各种与nlp相关的算法,基于keras和tensorflow github

    246. Python文本挖掘/NLP实战示例 github

    247. Blackstone:面向非结构化法律文本的spaCy pipeline和NLP模型 github

    248. 通过同义词替换实现文本“变脸” github

    249. 中文 预训练 ELECTREA 模型: 基于对抗学习 pretrain Chinese Model github

    250. albert-chinese-ner - 用预训练语言模型ALBERT做中文NER github

    251. 基于GPT2的特定主题文本生成/文本增广 github

    252. 开源预训练语言模型合集 github

    253. 多语言句向量包 github

    254. 编码、标记和实现:一种可控高效的文本生成方法 github

    255. 英文脏话大列表 github

    256. attnvis:GPT2、BERT等transformer语言模型注意力交互可视化 github

    257. CoVoST:Facebook发布的多语种语音-文本翻译语料库,包括11种语言(法语、德语、荷兰语、俄语、西班牙语、意大利语、土耳其语、波斯语、瑞典语、蒙古语和中文)的语音、文字转录及英文译文 github

    258. Jiagu自然语言处理工具 - 以BiLSTM等模型为基础,提供知识图谱关系抽取 中文分词 词性标注 命名实体识别 情感分析 新词发现 关键词 文本摘要 文本聚类等功能 github

    259. 用unet实现对文档表格的自动检测,表格重建 github

    260. NLP事件提取文献资源列表 github

    261. 金融领域自然语言处理研究资源大列表 github

    262. CLUEDatasetSearch - 中英文NLP数据集:搜索所有中文NLP数据集,附常用英文NLP数据集 github

    263. medical_NER - 中文医学知识图谱命名实体识别 github

    264. (哈佛)讲因果推理的免费书 pdf

    265. 知识图谱相关学习资料/数据集/工具资源大列表 github

    266. Forte:灵活强大的自然语言处理pipeline工具集 github

    267. Python字符串相似性算法库 github

    268. PyLaia:面向手写文档分析的深度学习工具包 github

    269. TextFooler:针对文本分类/推理的对抗文本生成模块 github

    270. Haystack:灵活、强大的可扩展问答(QA)框架 github

    271. 中文关键短语抽取工具 github

    272. pdf文档解析相关工具包

    • pdf生成
      • fdfgen: 能够自动创建pdf文档,并填写信息
    • pdf表格解析
      • pdftabextract: 用于OCR识别后的表格信息解析,很强大
      • tabula-py: 直接将pdf中的表格信息转换为pandas的dataframe,有java和python两种版本代码
      • pdfx: 自动抽取出引用参考文献,并下载对应的pdf文件
      • invoice2data: 发票pdf信息抽取
      • camelot: pdf表格解析
      • pdfplumber: pdf表格解析
    • pdf语义分割
      • PubLayNet:能够划分段落、识别表格、图片
    • pdf读取工具
      • PDFMiner:PDFMiner能获取页面中文本的准确位置,以及字体或行等其他信息。它还有一个PDF转换器,可以将PDF文件转换成其他文本格式(如HTML)。还有一个可扩展的解析器PDF,可以用于文本分析以外的其他用途。
      • PyPDF2:PyPDF 2是一个python PDF库,能够分割、合并、裁剪和转换PDF文件的页面。它还可以向PDF文件中添加自定义数据、查看选项和密码。它可以从PDF检索文本和元数据,还可以将整个文件合并在一起。
      • ReportLab:ReportLab能快速创建PDF 文档。经过时间证明的、超好用的开源项目,用于创建复杂的、数据驱动的PDF文档和自定义矢量图形。它是免费的,开源的,用Python编写的。该软件包每月下载5万多次,是标准Linux发行版的一部分,嵌入到许多产品中,并被选中为Wikipedia的打印/导出功能提供动力。

    273. 中文词语相似度计算方法 gihtub

    • 综合了同义词词林扩展版与知网(Hownet)的词语相似度计算方法,词汇覆盖更多、结果更准确。

    274. 人民日报语料库处理工具集 github

    275. stanza:斯坦福团队NLP工具 github

    • 可处理六十多种语言

    276. 一个大规模医疗对话数据集 github

    • 包含110万医学咨询,400万条医患对话

    277. 新冠肺炎相关数据

    • 新冠及其他类型肺炎中文医疗对话数据集 github
    • 清华大学等机构的开放数据源(COVID-19)github

    278. DGL-KE 图嵌入表示学习算法 github

    279. nlp-recipes:微软出品--自然语言处理最佳实践和范例 github

    280. chinese_keyphrase_extractor (CKPE) - A tool for chinese keyphrase extraction 一个快速从自然语言文本中提取和识别关键短语的工具 github

    281. 使用GAN生成表格数据(仅支持英文) github

    282. Google发布Taskmaster-2自然语言任务对话数据集 github

    283. BDCI2019金融负面信息判定 github

    284. 用神经网络符号推理求解复杂数学方程 github

    285. 粤语/英语会话双语语料库 github

    286. 中文ELECTRA预训练模型 github

    287. 面向深度学习研究人员的自然语言处理实例教程 github

    288. Parakeet:基于PaddlePaddle的文本-语音合成 github

    289. 103976个英语单词库(sql版,csv版,Excel版)包 github

    290. 《海贼王》知识图谱 github

    291. 法务智能文献资源列表 github

    292. Datasaur.ai 在线数据标注工作流管理工具 link

    293. (Java)准确的语音自然语言检测库 github

    294. 面向各语种/任务的BERT模型大列表/搜索引擎 link

    295. CoVoST:Facebook发布的多语种语音-文本翻译语料库 github

    296. 基于预训练模型的中文关键词抽取方法 github

    297. Fancy-NLP:用于建设商品画像的文本知识挖掘工具 github

    298. 基于百度webqa与dureader数据集训练的Albert Large QA模型 github

     

    展开全文
  • 3. 了解并创建Git仓库,以及添加文件到仓库 先来理解一个概念,repository。你可以简单将它理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何...
    
    

    先来理解一个概念,repository。你可以简单将它理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。这个目录通常称为仓库,或者叫版本库。

    通过 git init 命令把这个目录变成 Git 可以管理的仓库:

    1 git init

    瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

    也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。不过,不建议你使用自己正在开发的公司项目来学习Git,否则造成的一切后果概不负责。

    初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。

    仓库的文件结构

    我们看看这个目录下的文件结构:

    01 $ ls
    02 HEAD
    03 config
    04 description
    05 index
    06 branches/
    07 hooks/
    08 info/
    09 objects/
    10 refs/

    该目录下有可能还有其他文件,但这是一个全新的 git init 生成的库,所以默认情况下这些就是你能看到的结构。新版本的 Git 不再使用 branches 目录,description 文件仅供 GitWeb 程序使用,所以不用关心这些内容。config 文件包含了项目特有的配置选项,info 目录保存了一份不希望在 .gitignore 文件中管理的忽略模式 (ignored patterns) 的全局可执行文件。hooks 目录保存了客户端或服务端钩子脚本。

    另外还有四个重要的文件或目录:HEAD 及 index 文件,objects 及 refs 目录。这些是 Git 的核心部分。

    • objects 目录存储所有数据内容
    • refs 目录存储指向数据 (分支) 的提交对象的指针
    • HEAD 文件指向当前分支
    • index 文件保存了暂存区域信息

    添加文件到仓库

    首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

    现在我们编写一个readme.txt文件,内容如下:

    1 Git is a version control system.
    2 Git is free software.

    一定要放到NowaMagicOnGit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

    和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。

    第一步,用命令git add告诉Git,把文件添加到仓库:

    1 $ git add readme.txt

    执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

    第二步,用命令git commit告诉Git,把文件提交到仓库:

    1 $ git commit -m "wrote a readme file"
    2 [master (root-commit) cb926e7] wrote a readme file
    3  1 file changed, 2 insertions(+)
    4  create mode 100644 readme.txt

    简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

    嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。

    git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。

    为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

    1 $ git add file1.txt
    2 $ git add file2.txt
    3 $ git add file3.txt
    4 $ git commit -m "add 3 files."

    小结

    现在总结一下今天学的两点内容:

    1. 初始化一个Git仓库,使用git init命令。并且了解到一个仓库的文件组成结构。

    2. 添加文件到Git仓库,分两步:

    • 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件;
    • 第二步,使用命令git commit,完成。
    展开全文
  • Linux下静态、共享创建与应用

    千次阅读 多人点赞 2019-02-15 09:53:56
    2 用例子说明两种创建与应用 2.1 静态创建与应用 2.1.1 静态创建 2.1.2 静态的应用 2.1.3 静态搜索路径 补充说明 2.2 共享创建与应用 2.2.1 共享创建 2.2.2 共享的应用 2.2.2 ...

    目录

    1 什么是静态库和共享库

    1.1 为什么要有静态库和共享库

    1.2  静态库和共享库的区别

    2 用例子说明两种库的创建与应用

    2.1 静态库的创建与应用

    2.1.1 静态库的创建

    2.1.2 静态库的应用

    2.1.3 静态库搜索路径

    补充说明

    2.2 共享库的创建与应用

    2.2.1 共享库的创建

    2.2.2 共享库的应用

    2.2.2 共享库搜索路径

    补充说明


    1 什么是静态库和共享库

    1.1 为什么要有静态库和共享库

            还是先来说一下我自己对静态库和共享库的理解。

            为什么会有静态库和共享库这两个东西呢?我们都知道,为了避免一些重复性的工作并且便于编程,开发人员定义了一系列的标准函数以供调用,这些函数都放在相应的函数库中,而我们在进行开发时也会经常用到这些标准函数,那么就需要找到函数的定义,那么编译器该怎么去找到函数的定义呢?

            一种方法是让编译器自动识别函数。比如说我在程序中调用了printf函数,那么当编译器识别到对printf函数的调用时,就直接生成printf函数定义的相应代码,这种方法听起来非常简单,但是实际上缺点也很多,因为标准库函数是会更新的,一旦增加、删除或者修改了其中某一个标准函数,那么相应的编译器也必须进行改变,不然无法识别新的函数,这也是相当复杂的,需要从编译器进行改变,那有没有办法可以将标准函数的改变与编译器分开呢?这就是第二种方法了。

             第二种方法是直接将所有的标准函数都放在一个源文件中,然后编译生成一个可重定位目标文件(.o),当编译器识别到某一个被调用的函数时,就直接去这个.o文件中寻找该函数的定义,显然在这种方法下,即使修改了标准函数,编译器也不需要进行改变了,这就解决了第一种方法带来的问题。但是这种方法也有缺点,因为标准函数是非常多的,比如说a.cpp中只用了一个printf函数,b.cpp中只用了一个scanf函数,当它们各自编译结束后,二者生成的可执行文件中都包含着所有标准函数集合的一个副本,这是对磁盘空间的一种浪费,不仅如此,当可执行文件运行,程序加载到内存中时,是会将所有标准函数一起加载到内存中的,这也是对内存资源的一种极大浪费,不容忽视。除此之外,当某个标准函数发生改变的时候,都需要对所有函数进行重新编译,这个过程也非常耗时而不易维护。

            显而易见,第二种方法的主要缺点就是将所有函数都放在一起太浪费资源,因此就考虑将这些函数都各自分开成一个个的小模块,到时候按需调用。但是也不能每个函数自成一个模块,这样显然也会很麻烦,因此就可以考虑将相关的函数放在一个模块中,然后一个或多个模块封装到一个库中,这个库显然就是多个模块文件(可重定位目标文件)的集合,也叫静态库(.a)。

            值得注意的是,静态库也不知道用户到底会调用哪个函数(模块),所以其中也很可能存在用户不需要的模块,但在链接时,链接器将只会复制被程序引用的目标模块,这样一来,相较于第二种方法,程序所生成的可执行文件在内存和磁盘中的空间大小将显著降低。

            这样看起来,静态库似乎已经将前两种方法的缺点都改善了,但它并非是最好的,举个例子,现在有a.cpp和b.cpp都依赖于同一个静态库lib.a中的相同模块m,各自生成可执行文件a和b,那么不管程序是在编译时还是运行时,磁盘中和内存中m都会存在两份,各自存在于可执行文件a和b中。这显然也是一种资源的浪费,而共享库(.so)则很好的解决了这个问题,共享库在程序运行时,会被加载到内存中任意地址处,此时,内存中就存在着该共享库的副本,所有引用该共享库的可执行文件都共享这个库,这样一来,原本需要在磁盘和内存中分别存在2份的模块m如今只需在磁盘和内存中各存1份即可。

    1.2  静态库和共享库的区别

    • 静态库被程序静态链接于编译时,而共享库被动态链接于运行时;
    • 静态链接时,需要把所有对静态库的引用内容都嵌入到最终的可执行文件中,且相同模块并不共用,都有相应的副本,因此相应的可执行文件在磁盘和内存中所占空间较大;而动态链接是发生在运行时的,并且是共享的,因此相应的可执行文件在磁盘中所占空间较小;
    • 由于静态链接是在编译时完成的,因此可执行文件中以及包含有所需的静态库,可执行文件可以单独运行;由于动态链接是在程序运行时完成的,可执行文件在加载入内存运行时才会链接共享库,因此可执行文件必需共享库的支持,不能单独运行;
    • 当静态库中某个模块更新后,需要重新编译链接生成相应的可执行文件;另一方面若共享库中某个模块更新了,只要接口没有改变,就不需要重新编译链接生成可执行文件;
    • 静态链接比动态链接速度稍快
    • 静态库中不能包含共享库,而共享库中可以包含静态库

            综合以上区别,可以发现动态链接的性能是明显优于静态链接的,但是这不一定就说明静态链接一定比不上动态链接了。如果库本身就比较小且不经常改变,基于速度的角度,应当选择静态链接,否则还是应当选择动态链接,由于是大型软件需要经常维护、扩展之类的情况。除此之外,静态链接的一个显著优点是其相应的可执行文件已经是完整的,包含所有所需的模块,因此可以很方便地移动到其他地方执行。

    2 用例子说明两种库的创建与应用

             建立以下文件树,其中bin文件夹用于存放可执行程序,lib文件夹用于存放库文件,src文件夹用于存放源代码,如图所示:

            在src文件夹中,包含了四则运算的四个源文件.cpp以及一个主函数源文件main.cpp,其中main.cpp的代码如下:

         四则运算分别定义于相应的.cpp文件中。现在以该例来说明静态库与共享库如何创建并应用的。

    2.1 静态库的创建与应用

    2.1.1 静态库的创建

          静态库实际上就是一个或多个.o文件的集合。因此第一步是将各模块编译为.o文件。

          编译命令为g++ -c xxx.cpp    如下:

             此时就可以将add.o、div.o......四个模块打包到静态库中,这里需要用到AR工具,ar的指令详解可参考ar指令说明

    (在使用ar命令时,创建库时常用ar rcs .....,若往库中添加模块时用r即可ar r ....,若要删除库中某一模块用d即可ar d ......)

            在这里使用ar rcs libxxx.a  xx.o xx.o.....  rcs中的r表示向库中添加模块,若模块已存在则替换,c表示创建库文件,s表示生成一个目标文件索引。

             此时可用命令参数t来查看静态库中的模块清单,如下所示:

             此时静态库则创建完成。

    2.1.2 静态库的应用

             静态库的应用即是将main.cpp文件与建立的libcalcu.a静态库进行链接并生成可执行文件运行的过程。

             静态库链接直接使用g++命令即可,不过由于g++在默认情况下是动态链接的,因此如果要进行静态链接那么就需要命令参数-static,如下所示:

            

            此时就在bin文件夹中生成了可执行文件output,加载并运行output,如下:

            为了与动态链接的可执行文件作对比,我们再来看看可执行文件output的大小:      

           可见静态链接后的可执行文件大小为1.6M。

    2.1.3 静态库搜索路径

    1.先去找链接命令行中的参数-L。-L参数可直接指定静态库的搜索路径,-L. 表示在当前目录下搜索(注意L后面有个点),-L后面直接加上路径表示在该路径下搜索(L后面没有点),比如-L../lib libcalcu.a 表示在当前目录的同级目录lib中搜索libcalcu.a静态库,这里在-L指明了搜索路径的情况下,静态库的命名格式为libxxx.a,那么就可以用-l命令将其简化为-lxxx,即可将-L../lib libcalcu.a 简化为-L../lib -lcalcu;

    2.再找静态链接的环境变量LIBRARY_PATH下的路径;(个人感觉这里设置环境变量意义不大)

    3.再找系统默认路径/lib、/usr/lib、/usr/local/lib。

    补充说明

             在进行静态链接时一定要注意命令行中库文件放在后面,被依赖的文件也要放在后面,这里的a依赖于b是指b中定义了a中所引用的一个符号。如果文件之间依赖关系复杂,可以将 多个依赖关系复杂的文件放在一个静态库中,或者在命令行中根据依赖关系多次指明被依赖文件也是可以的,比如说x.o依赖于y.a,同时y.a依赖于z.a,并且z.a由依赖于y.a,那么此时这三个文件在命令行中的链接顺序就可以是x.o y.a z.a y.a。

            之所以这样,是因为在符号解析过程中,链接器维护一个可重定位目标文件的集合E,这个集合中的文件最终合并为可执行文件;一个未解析符号集合U,该集合中存放着被引用但是未被定义的符号;以及一个一个已经被定义的符号D,在初始状态下,三个集合均为空。所谓符号,就像变量名、函数名都是符号。

            然后链接器从左到右按照各个可重定位目标文件(.o)和静态库文件(.a)在命令行上出现的顺序来对每个文件进行扫描,如果输入文件为可重定位目标文件,那么链接器就会将该文件放到集合E中,并且将该输入文件中的符号定义和引用情况反应在集合U和集合D中;

            如果输入文件为静态库文件,那么链接器就会扫描该静态库文件中的各成员文件(.o),将成员文件中的符号与U中已被引用但是未定义的符号进行匹配,如果该静态库中某个成员文件定义了U中某个已被引用但未被定义的符号,那么链接器就将该成员文件放到集合E中,然后在U中删除该符号,D中添加该符号,再继续扫描下一个成员文件,这样一直反复进行扫描下去,直到U和D中集合都不再变化,就将多余的成员文件抛弃,然后就继续扫描下一个输入文件了。

            若文件a依赖于b,那么就说明a中存在某一符号的引用,b中存在该符号的定义。如果先扫描到符号的定义,那么就会将该符号放到D中,而由于每次扫描都是与U中的符号进行匹配,因此即使后面再扫描到该符号的引用,也会直接将该符号又放入U中,由于符号的定义已经在D中了,因此到最后该符号依然存在于U中,U中非空,说明链接中存在被引用但是未定义的符号,从而该符号被认为是未定义的符号而报错。

    2.2 共享库的创建与应用

    2.2.1 共享库的创建

            创建共享库的输入文件可为.c/.cpp文件,用命令参数-shared表示创建共享库,-fpic参数也是必要的,指示编译器生成与位置无关的代码,这样才能实现应用程序之间的资源共享,如下所示:

            可见此时lib文件夹下存在的libcalcusr.so即是创建的共享库。

            值得一提的是,虽然-static和-shared这一对命令参数恰好一个代表静态一个代表共享,但是二者使用的时机是完全不同的:-static使用在生成可执行文件时,而-share则使用在创建共享库时,而静态库的创建是使用的ar命令。

    2.2.2 共享库的应用

            共享库创建完成后,就要将其链接到main.cpp文件中来生成可执行文件了,如下:

            可以看到,可执行文件output_s已经生成,并且其大小明显小于静态链接所生成的可执行文件。

            这里尤其需要注意的是./libcalcusr.so,这里直接指定了可执行文件所要链接的共享库的搜索路径在当前目录下(如果将./libcalcusr.so改为libcalcusr.so,虽然生成可执行文件时不会出错,但是最终可执行文件运行时是无法找到共享库的,即链接时正常,运行时出错),同样,如果将共享库文件移至src下,那么就应当将其改为../src/libcalcusr.so,总之,在最后需要指定共享库的搜索路径,否则在加载执行可执行文件时会出现错误。

             加载运行如下:

    2.2.2 共享库搜索路径

    1.先找编译目标代码时指定的动态库搜索路径。这里所指的编译时实际就是指的在最后用共享库和main.cpp文件生成可执行文件时直接指定共享库的搜索路径,需要注意的是,这里指定共享库的搜索路径必须同时指出链接时路径和运行时路径,链接器根据给出的链接时路径找到共享库这样才能生成可执行文件,程序运行时需根据运行时路径找到共享库才能运行可执行文件。有两种方法,一种是如上所述直接给出共享库的路径,这里就相当于路径既代表了链接时路径也代表了运行时路径;另一种方法是使用命令参数-L来指定链接时路径,这点和静态库类似就不多说了,然后使用命令参数-Wl(小写L),-rpath=xxxx来指定运行时路径,比如说这里的libcalcusr.so在lib文件夹下,main.cpp在src文件夹下,我要将可执行文件最终输出在bin文件夹下,当前目录为src,就使用以下命令即可:g++ -o  ../bin/output_s main.cpp -L../lib -lcalcusr -Wl,-rpath=../lib,其中的-lcalcusr也是在-l参数下的库名简写。

    2.再找环境变量LD_LIBRARY_PATH指定的动态库搜索路径。如果此时已经生成了可执行文件,但是可执行文件找不到共享库从而无法运行,那么就可以设置环境变量LD_LIBRARY_PATH来指出共享库的搜索路径。举个例子,生成的可执行文件在bin文件夹下,不管之前链接时是如何指定搜索路径的,总之现在无法找到共享库,而此时共享库位于bin文件夹下,那么就可以使用指令export LD_LIBRARY_PATH=../bin ,这里的右侧路径是相对于当前路径而言的。不过这种方式是治标不治本的, 只是当前链接可行,后面就不行了。

    3.再找配置文件/etc/ld.so.conf中指定的动态库搜索路径。打开/etc/ld.so.conf,在文件末尾处加上共享库路径,保存后再在命令行中输入ldconfig命令执行即可。

    4.最后寻找默认的动态库搜索路径/usr/lib、/lib(分先后顺序)。

             此外,如果我们并不知道可执行文件需要链接哪些共享库,就可以使用ldd指令,来查看一个可执行文件所依赖的共享库,这样也方便解决无法找到共享库的问题。

            如图所示,可以看到可执行文件output_s所依赖的共享库。

    补充说明

            以上链接共享库的方法为隐式链接共享库,当然还有显式链接共享库了。显示是指在程序中直接写出相关的链接代码,在Linux下,可用dlopen函数通过指定共享库路径来加载和链接共享库,加载成功后可以得到相应共享库的句柄,然后就可以根据该句柄并调用dlsym函数来获取相应共享库中指定符号的地址(往往就是共享库中某函数地址),通过这个地址就可以调用相应的函数了,从而实现共享库的应用。

    展开全文
  • 现实中每个程序都要依赖很多基础的底层,不可能每个人的代码都从零开始,因此的存在意义非同寻常。本质上来说是一种可执行代码的二进制形式,可以被操作系统载入内存执行。有两种:静态(.a、.lib)和动态...
  • 转载自: ...其他不错的资源: http://technet.microsoft.com/zh-cn/sysinternals/cc451355(v=vs.71) 用ATL创建COM组件 一、创建一个模型(工程) MyProj。 二、给模型(工程)增加一个组件 M
  • 【语料】语料库资源汇总

    万次阅读 2013-12-19 08:52:27
    国内可用免费语料(凡没有标注不可用的链接均可用) (一) 国家语委 1国家语委现代汉语语料http://www.cncorpus.org/ 现代汉语通用平衡语料现在重新开放网络查询了。重开后的在线检索速度更快,功能...
  • ### 目录 一、 基本概念 1. 静态动态区别 2. 的版本 3. iOS 设备的CPU架构 4.... 5.... 6....二、打包framewor静态 1. 创建项目-》创建静态项目 2. 静态如何开发调试? 3. 脚本合...
  • VS2019环境下C++动态链接(DLL)的创建与调用

    万次阅读 多人点赞 2019-12-20 02:17:33
    本文旨在介绍如何在VS2019的环境下建立动态链接以及如何调用动态链接
  • 【汇总】语料库资源

    千次阅读 2015-06-02 23:40:32
    国内可用免费语料(凡没有标注不可用的链接均可用) (一) 国家语委 1.国家语委现代汉语语料http://www.cncorpus.org/ 现代汉语通用平衡语料现在重新开放网络查询了。重开后的在线检索速度更快,功能更强...
  • GitHub分支创建及合并

    万次阅读 多人点赞 2018-12-01 10:32:27
    创建好的GitHub资源库的code界面中,左侧有一个Branch:master,这个就是指的分支了,表明当前分支为master分支(主分支)。我们想创建分支了,点一下,在框内输入分支的名字即可创建成功。 创建分支成功,这里...
  • 讨论方案:直接长久存储 表schema:一般按天创建分区与表命名。库名:buffer,表名:初步考虑格式为:buffer日期业务表名,待定。 明细层(ODS, Operational Data Store,DWD: data warehouse detail) 概念:是数据...
  • 创建GitHub技术博客全攻略

    万次阅读 多人点赞 2014-07-12 13:10:47
    GitHub可以挂载静态站点和静态资源,是一种低成本的公网展示手段。每个免费仓库的限制大约是260MB.每个账号可以注册多个组织,则拥有多个二级域名.
  • 【Linux】Linux进程的创建与管理

    万次阅读 多人点赞 2018-07-27 19:21:29
    在Linux系统中,除了系统启动之后的第一个进程由系统来创建,其余的进程都必须由已存在的进程来创建,新创建的进程叫做子进程,而创建子进程的进程叫做父进程。那个在系统启动及完成初始化之后,Linux自动创建的进程...
  • Unity5.6大规模地形—地形资源创建(1)

    万次阅读 多人点赞 2017-04-25 22:13:09
    这个脚本在Editor中添加了一个ImportTerrain按钮,点击这个按钮会自动创建一个名为hd的TerrainData资源,有了这个资源我们可以在场景中使用脚本很方便地创建Terrain对象。这个功能实现的重点在于:如何从.r16格式的...
  • 数据仓库基本知识

    万次阅读 多人点赞 2017-10-31 17:35:04
    因此,企业仍然没有最大化地利用已存在的数据资源,以至于浪费了更多的时间和资金,也失去制定关键商业决策的最佳契机。 于是,企业如何通过各种技术手段,并把数据转换为信息、知识避免各种无知状态和瞎猜行为,...
  • 语料库资源————(一)

    千次阅读 2017-02-15 10:21:50
    国内可用免费语料(凡没有标注不可用的链接均可用) (一) 国家语委 1.国家语委现代汉语语料http://www.cncorpus.org/ 现代汉语通用平衡语料现在重新开放网络查询了。重开后的在线检索速度更快,功能更强,...
  • 访问网络接口和磁盘驱动器等资源是在此环境中虚拟化的,与系统的其余部分隔离,因此您需要将端口映射到外部世界,并明确要将哪些文件“复制”到那个环境。但是,在完成这些之后,您可以期望在其中定义的应用程序的...
  • 免费创建微信公众号全攻略

    万次阅读 2016-03-02 02:16:47
    本文属于教程性质, 主要介绍如何创建订阅号,并演示最基础和常用的功能。 微信的平台分为公众平台和开放平台。 公众平台就是面向公众的平台。 分为3类: 订阅号 : 发布信息用的,面向个人或企业俗称自媒体(无微信支付...
  • C++静态与动态

    千次阅读 2016-10-20 09:50:56
    这次分享的宗旨是——让大家学会创建与使用静态、动态,知道静态与动态的区别,知道使用的时候如何选择。这里不深入介绍静态、动态的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养...
  • libevent介绍

    千次阅读 2019-03-17 16:31:04
    一、libevent就是一个基于事件通知机制的,支持/dev/poll、kqueue、event ports、select、poll和epoll事件机制,也因此它是一个跨操作系统的(支持Linux、*BSD、Mac OS X、Solaris、Windows等)。目前应用该的...
  • 我们一般在创建Activity时需要重写该方法做一些初始化的操作,如通过setContentView设置界面布局的资源,初始化所需要的组件信息等。  (2)onStart() ,可见状态  该方法回调表示Activity正在启动,此时Activity...
  • java复习题库

    万次阅读 多人点赞 2018-11-12 22:09:17
    B 37:方法重写的意义有哪些? A.从父类中继承的方法,不能满足子类需求的时候,一般需要重写该方法 B.随意重写 C.必须重写父类中的方法 D.所有父类的方法都可以重写 ?A 38:哪个关键字强制调用父类的构造函数或者属性...
  • C#创建和调用DLL

    万次阅读 2007-03-24 16:15:00
    一、写在前面 C# 语言是一种简单但功能强大的编程语言,用于编写企业应用程序。 C# 语言从C和 C++语言演化而来,在语句、表达式和运算符方面使用了许多 C++ 功能。... 什么是动态链接?DLL三个字母对于你来
  • 13 Maven-创建Hudson任务

    千次阅读 2016-05-06 09:49:48
    1 创建Hudson任务 要创建一个Hudson任务来持续集成Maven项目,首先单击页面左边的新建任务,然后就需要在页面右边选择任务的名称及类型。 这里有三个类型,这里说一下自由式的和多配置的,后者需要用哦过户进行多...
  • C++静态与动态详解与使用

    千次阅读 2016-09-30 09:07:40
    这次分享的宗旨是——让大家学会创建与使用静态、动态,知道静态与动态的区别,知道使用的时候如何选择。这里不深入介绍静态、动态的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养...
  • iOS如果想要实现实时发版,据我了解现在基本上用的是两种方式 1:使用Lua脚本进行,基本上很多手游都是这样做的,再配合上Cocos2d-...这里说下创建动态的步骤: 下面直接上代码啦。 动态中测试界面 VCOne.h
  • 在 Java 中创建微服务

    千次阅读 2017-04-13 10:54:44
    对于传统的集中化治理,做一件事的专注服务的概念有何意义? 微服务会如何处理传统的数据建模方式? 本章将重点介绍如何识别和创建组成应用程序的微服务,特别是如何将识别的候选服务转换为 RESTful API,然后在 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 135,300
精华内容 54,120
热门标签
关键字:

创建资源库的意义