ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TextBlob 高级用法:覆盖默认模型与 Blobber 工厂类实战指南

TextBlob 高级用法:覆盖默认模型与 Blobber 工厂类实战指南 NLP人工智能【免费下载链接】TextBlobSimple, Pythonic, text processing--Sentiment analysis, part-of-speech tagging, noun phrase extraction, translation, and more.项目地址https://gitcode.com/gh_mirrors/te/TextBlob点击查看免费下载TextBlob 的简单 API 背后允许开发者按需替换底层算法模型——无论是情感分析器、分词器、名词短语提取器、POS 标注器还是句法解析器都可以通过构造参数显式注入自定义实现。本文以官方高级用法文档docs/advanced_usage.rst为骨架结合src/textblob/下的源码实现系统讲解各模型的默认实现、替换方式、输出格式差异以及如何用Blobber工厂类消除重复配置读完即可在自己的文本处理管线中自由组合模型。覆盖机制总览TextBlob 构造参数与默认值TextBlob 的模型覆盖能力全部通过构造函数暴露。查看 blob.py 中BaseBlob.__init__与_initialize_models的实现构造器接受以下可选参数参数作用默认值源码见 blob.pytokenizer分词器负责把文本切成词/句 tokenWordTokenizer()pos_tagger词性标注器返回(word, tag)序列NLTKTagger()np_extractor名词短语提取器返回短语列表FastNPExtractor()analyzer情感分析器返回Sentiment命名元组PatternAnalyzer()parser句法解析器返回带标签的解析串PatternParser()classifier文本分类器用于classify()方法None需自行训练参数校验逻辑在_validated_param中实现若传入的对象不是对应基类BaseTokenizer、BaseTagger、BaseNPExtractor、BaseSentimentAnalyzer、BaseParser的实例会抛出ValueError传入None则回退到默认值。这意味着任何继承了相应基类的自定义实现都可以无缝接入。情感分析器Sentiment Analyzerstextblob.sentiments模块提供两种开箱即用的情感分析实现新增于 0.5.0源码位于 en/sentiments.pyPatternAnalyzer基于 pattern 库的情感分析实现默认采用。其analyze()返回命名元组Sentiment(polarity, subjectivity)其中polarity取值区间为[-1.0, 1.0]subjectivity取值区间为[0.0, 1.0]0.0 为完全客观1.0 为完全主观。若以keep_assessmentsTrue调用对应blob.sentiment_assessments属性还会附带assessments字段列出每个被评估 token 的极性、主观性得分。NaiveBayesAnalyzer基于 NLTK 的朴素贝叶斯分类器训练语料为电影评论语料库movie reviews corpus。其analyze()返回结构不同的命名元组Sentiment(classification, p_pos, p_neg)给出pos/neg二分类结果及两类概率。覆盖方式将另一实现传入 TextBlob 构造函数 from textblob import TextBlob from textblob.sentiments import NaiveBayesAnalyzer blob TextBlob(I love this library, analyzerNaiveBayesAnalyzer()) blob.sentiment Sentiment(classificationpos, p_pos0.7996209910191279, p_neg0.2003790089808724)值得注意的源码细节NaiveBayesAnalyzer的训练是惰性加载的——analyze()内部会先触发train()在 NLTK movie_reviews 语料上构建特征集默认特征提取器_default_feature_extractor对每个词做 one-hot 字典映射且过滤掉长度小于 3 的 token再通过prob_classify输出类别概率。因此使用该分析器前需确保已下载movie_reviews语料见 download_corpora.py 提供的下载工具。分词器Tokenizerswords与sentences属性分别是textblob.tokenizers.WordTokenizer和SentenceTokenizer的便捷封装新增于 0.4.0。源码见 tokenizers.pyWordTokenizer即 NLTK 推荐的 TreeBank 分词器负责拆分缩略形式dont→do nt、逗号与单引号并分离句尾句点。其tokenize()支持include_punc参数决定是否把标点作为独立 token。SentenceTokenizer即 NLTK 的 Punkt 句子分词器用无监督算法建模缩写词、搭配与句首词以识别句子边界。TextBlob 构造器还接受 NLTK 提供的任意分词器_initialize_models中校验类型为BaseTokenizer或 NLTK 的TokenizerI并通过tokens属性读取结果 from textblob import TextBlob from nltk.tokenize import TabTokenizer tokenizer TabTokenizer() blob TextBlob(This is\ta rather tabby\tblob., tokenizertokenizer) blob.tokens WordList([This is, a rather tabby, blob.])此外还可以用tokenize([tokenizer])方法临时指定分词器而不影响 blob 的默认配置该方法定义于 blob.py不传参时回退到 blob 自身的 tokenizer from textblob import TextBlob from nltk.tokenize import BlanklineTokenizer tokenizer BlanklineTokenizer() blob TextBlob(A token\n\nof appreciation) blob.tokenize(tokenizer) WordList([A token, of appreciation])注意区分两个属性的语义tokens返回该 blob 的 tokenizer 切出的全部 token含标点而words是去除标点后的词序列详见 blob.py。名词短语提取器Noun Phrase ChunkersTextBlob 内置两种名词短语提取器源码见 en/np_extractors.pyFastNPExtractor默认源自 Shlomi Babluki 的高效实现。其内部用正则分词器 Brown 语料库news 分类训练 unigram/bigram 标注器再通过一个上下文无关文法CFG反复合并相邻 token最终输出标签为NNP专有名词或NNI名词短语的片段。CFG 规则包括(NNP,NNP)→NNP、(NN,NN)→NNI、(JJ,NN)→NNI等组合。ConllExtractor使用 CoNLL 2000 语料库训练 chunk parserChunkParser内部以 UnigramTagger 为回退、BigramTagger 为主干再结合相同的 CFG 与无意义后缀过滤忽略DT、CC、PRP$、PRP等提取名词短语树。通过np_extractor参数即可替换也可传入自定义的BaseNPExtractor子类 from textblob import TextBlob from textblob.np_extractors import ConllExtractor extractor ConllExtractor() blob TextBlob(Python is a high-level programming language., np_extractorextractor) blob.noun_phrases WordList([python, high-level programming language])noun_phrases属性在返回前会对每个短语做strip().lower()归一化并过滤掉长度不足 2 的项见 blob.py。POS 标注器POS Taggerstextblob.taggers提供两种词性标注实现源码见 en/taggers.pyPatternTagger默认标注器使用与 pattern 库相同的实现。NLTKTagger使用 NLTK 的 TreeBank 标注器nltk.tag.pos_tag。注意使用NLTKTagger需要安装 NumPy。与分词器、名词短语提取器一样标注器可通过pos_tagger参数显式指定 from textblob import TextBlob from textblob.taggers import NLTKTagger nltk_tagger NLTKTagger() blob TextBlob(Tag! Youre It!, pos_taggernltk_tagger) blob.pos_tags [(Word(Tag), uNN), (Word(You), uPRP), (Word(), uVBZ), (Word(re), uNN), (Word(It), uPRP)]pos_tags别名tags返回(Word, tag)元组列表其中Word实例携带pos_tag属性供后续词形还原lemmatize等操作使用见 blob.py。句法解析器Parsers解析器同样可以注入 TextBlob 构造函数新增于 0.6.0。textblob.parsers.PatternParser是默认实现其parse()输出带词性、短语块和语义角色三层标签的解析串 from textblob import TextBlob from textblob.parsers import PatternParser blob TextBlob(Parsing is fun., parserPatternParser()) blob.parse() Parsing/VBG/B-VP/O is/VBZ/I-VP/O fun/VBG/I-VP/O ././O/O输出格式中每个 token 以/分隔三个标签词形/词性标签/短语块标签(B-/I-前缀表示块内位置)/语义角色O表示不属于任何角色。parse()方法本身也接受可选的parser参数作临时替换见 blob.py。BlobberTextBlob 工厂类每次创建 TextBlob 都重复传入 tagger、NP extractor、sentiment analyzer、classifier 和 tokenizer 十分繁琐。Blobber类新增于 0.4.0正是为此设计的模型共享工厂——它遵守 DRY 原则让同一组模型配置被多个 TextBlob 复用。实现见 blob.py。使用分两步第一步实例化Blobber并传入所需的模型 from textblob import Blobber from textblob.taggers import NLTKTagger tb Blobber(pos_taggerNLTKTagger())Blobber.__init__接受与TextBlob完全相同的模型参数tokenizer、pos_tagger、np_extractor、analyzer、parser、classifier未指定的参数同样回退到默认实现。第二步把Blobber当函数调用生产共享相同模型的 TextBlob blob1 tb(This is a blob.) blob2 tb(This is another blob.) blob1.pos_tagger is blob2.pos_tagger True从源码看Blobber.__call__内部正是把自身持有的模型逐一传给TextBlob(...)构造器因此所有产出的 blob 共享同一批模型实例is判断为True即是佐证。此外Blobber还实现了__repr__会打印当前各模型类名方便调试配置。典型场景包括批量处理多条推文时统一使用NaiveBayesAnalyzerConllExtractor或在服务启动时一次性构建带自定义 tokenizer 的Blobber供各请求复用以节省模型初始化开销。扩展阅读各模型基类与校验约定见 base.py自定义实现需继承相应Base*类模型训练所需 NLTK 语料的下载方式见 download_corpora.py测试用例可参考 test_sentiments.py、test_np_extractor.py 与 test_taggers.py它们验证了上述模型替换与默认回退行为更多 API 细节参见 api_reference.rst 与 quickstart.rst。赞分享NLP人工智能【免费下载链接】TextBlobSimple, Pythonic, text processing--Sentiment analysis, part-of-speech tagging, noun phrase extraction, translation, and more.项目地址https://gitcode.com/gh_mirrors/te/TextBlob点击查看免费下载相关推荐GoFr框架高级指南如何覆盖默认行为GoFr框架高级指南如何覆盖默认行为 概述 GoFr是一个功能强大的Go语言Web框架提供了许多开箱即用的默认功能。但在实际开发中我们经常需要根据项目需求后端微服务云原生可观测性Rust 错误码 E0399 深度解读关联类型默认值覆盖为何曾要求重实现默认方法Rust 错误码 E0399 深度解读关联类型默认值覆盖为何曾要求重实现默认方法 E0399 是 rustc 编译器错误码体系中一条已经退役的历史错误曾编程语言编译器语言运行时标准库FactoryBot 与属性默认值模型默认值与工厂定义的交互FactoryBot 与属性默认值模型默认值与工厂定义的交互 1. 理解属性默认值的双重来源 在Ruby应用程序开发中对象属性的默认值通常有两个来源 模型测试开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表