{"id":13672544,"url":"https://github.com/CasterWx/python-girlfriend-mood","last_synced_at":"2025-04-27T22:32:30.870Z","repository":{"id":46023898,"uuid":"154148665","full_name":"CasterWx/python-girlfriend-mood","owner":"CasterWx","description":":kissing_closed_eyes: Analyze her mood through her girlfriend's words ·女朋友聊天时的情绪波动图谱，没女朋友的可自用(雾）。 ","archived":false,"fork":false,"pushed_at":"2019-08-09T03:02:00.000Z","size":10304,"stargazers_count":649,"open_issues_count":5,"forks_count":96,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-11-11T10:42:33.385Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CasterWx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-22T13:26:36.000Z","updated_at":"2024-09-29T01:49:52.000Z","dependencies_parsed_at":"2022-07-18T21:34:27.012Z","dependency_job_id":null,"html_url":"https://github.com/CasterWx/python-girlfriend-mood","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CasterWx%2Fpython-girlfriend-mood","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CasterWx%2Fpython-girlfriend-mood/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CasterWx%2Fpython-girlfriend-mood/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CasterWx%2Fpython-girlfriend-mood/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CasterWx","download_url":"https://codeload.github.com/CasterWx/python-girlfriend-mood/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251219601,"owners_count":21554444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T09:01:38.793Z","updated_at":"2025-04-27T22:32:25.858Z","avatar_url":"https://github.com/CasterWx.png","language":"Python","readme":"## 通过对话分析女朋友的情绪值波动\n\n\u003e Blog : [Antzuhl](http://www.cnblogs.com/LexMoon/)\n\n\u003e Github : [CasterWx](https://github.com/CasterWx)\n\n\u003e 扩展小猫粮 : [小猫粮](https://github.com/CasterWx/python-girlfriend-mood/blob/master/Other.md)\n\n\n###### 欢迎关注公众号，开启和我的交流\n\n![weix](https://www.cnblogs.com/images/cnblogs_com/LexMoon/1391533/o_qrcode_for_gh_f3457f4f73a1_258.jpg)\n\n![todo](https://github.com/CasterWx/python-girlfriend-mood/blob/master/CS.jpg?raw=true)\n\n:kissing_closed_eyes::kissing_closed_eyes:  通过女朋友的一句话分析她的心情 。\n\nAnalyze her mood through her girlfriend's words .\n\n\n## 第一章 分词\n\n### 1、JieBa库\n\u003e“结巴”中文分词：做最好的 Python 中文分词组件\n\n\u003e\"Jieba\" (Chinese for \"to stutter\") Chinese text segmentation: built to be the best Python Chinese word segmentation module.\n\n### 2、特点\n * 支持三种分词模式：\n     * 精确模式，试图将句子最精确地切开，适合文本分析；\n     * 全模式，把句子中所有的可以成词的词语都扫描出来, 速度非常快，但是不能解决歧义；\n     * 搜索引擎模式，在精确模式的基础上，对长词再次切分，提高召回率，适合用于搜索引擎分词。\n\n * 支持繁体分词\n * 支持自定义词典\n * MIT 授权协议\n\n### 3、算法\n * 基于前缀词典实现高效的词图扫描，生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)\n * 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合\n * 对于未登录词，采用了基于汉字成词能力的 HMM 模型，使用了 Viterbi 算法\n\n### 4、主要功能\n\n####   1) 分词\n * `jieba.cut` 方法接受三个输入参数: 需要分词的字符串；cut_all 参数用来控制是否采用全模式；HMM 参数用来控制是否使用 HMM 模型\n * `jieba.cut_for_search` 方法接受两个参数：需要分词的字符串；是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词，粒度比较细\n * 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意：不建议直接输入 GBK 字符串，可能无法预料地错误解码成 UTF-8\n * `jieba.cut` 以及 `jieba.cut_for_search` 返回的结构都是一个可迭代的 generator，可以使用 for 循环来获得分词后得到的每一个词语(unicode)，或者用\n * `jieba.lcut` 以及 `jieba.lcut_for_search` 直接返回 list\n * `jieba.Tokenizer(dictionary=DEFAULT_DICT)` 新建自定义分词器，可用于同时使用不同词典。`jieba.dt` 为默认分词器，所有全局分词相关函数都是该分词器的映射。\n```python\nseg_list = jieba.cut(\"我要有女朋友了\", cut_all=True)\nprint(\"全模式: \" + \"/ \".join(seg_list))  # 全模式\n\nseg_list = jieba.cut(\"我要有女朋友了\", cut_all=False)\nprint(\"默认模式: \" + \"/ \".join(seg_list))  # 默认模式\n\nseg_list = jieba.cut(\"我要有女朋友了\")\nprint(\", \".join(seg_list))\n\nseg_list = jieba.cut_for_search(\"我要有女朋友了，然后我要打爆室友的狗头\")  # 搜索引擎模式\nprint(\"搜索引擎模式: \"+\", \".join(seg_list))  \n```\noutput :\n```\n全模式: 我/ 要/ 有/ 女朋友/ 朋友/ 了\n默认模式: 我要/ 有/ 女朋友/ 了\n我要, 有, 女朋友, 了\n搜索引擎模式: 我要, 有, 朋友, 女朋友, 了, ，, 然后, 我要, 打爆, 室友, 的, 狗头\n```\n####   2) 添加自定义词典\n \u003e载入词典\n * 开发者可以指定自己自定义的词典，以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力，但是自行添加新词可以保证更高的正确率\n * 用法： jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径\n * 词典格式和 `dict.txt` 一样，一个词占一行；每一行分三部分：词语、词频（可省略）、词性（可省略），用空格隔开，顺序不可颠倒。`file_name` 若为路径或二进制方式打开的文件，则文件必须为 UTF-8 编码。\n * 词频省略时使用自动计算的能保证分出该词的词频。\n```python\nprint('/'.join(jieba.cut('这个东梨会不会被分开呢。', HMM=False)))\n# 添加字典\nprint(jieba.suggest_freq(('东梨'), True)) # 添加一个词语'东梨'\nprint('/'.join(jieba.cut('这个东梨会不会被分开呢。', HMM=False)))\n```\noutput :\n```\n这个/东/梨/会/不会/被/分开/呢/。\n这个/东梨/会/不会/被/分开/呢/。\n```\n\n \u003e调整词典\n\n* 使用 `add_word(word, freq=None, tag=None)` 和 `del_word(word)` 可在程序中动态修改词典。\n* 使用 `suggest_freq(segment, tune=True)` 可调节单个词语的词频，使其能（或不能）被分出来。\n\n* 注意：自动计算的词频在使用 HMM 新词发现功能时可能无效。\n\n####   3) 关键词提取\n\u003e 基于 TF-IDF 算法的关键词抽取\n\n`import jieba.analyse`\n\n* jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())\n  * sentence 为待提取的文本\n  * topK 为返回几个 TF/IDF 权重最大的关键词，默认值为 20\n  * withWeight 为是否一并返回关键词权重值，默认值为 False\n  * allowPOS 仅包括指定词性的词，默认值为空，即不筛选\n* jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例，idf_path 为 IDF 频率文件\n\n```python\ns = \"操作系统（Operation System，简称OS）是管理计算机硬件与软件资源的程序，是计算机系统的内核与基石；操作系统本质上是运行在计算机上的软件程序 ；为用户提供一个与系统交互的操作界面 ；操作系统分内核与外壳（我们可以把外壳理解成围绕着内核的应用程序，而内核就是能操作硬件的程序）。\"\nfor x, w in jieba.analyse.extract_tags(s, withWeight=True):\n    print('%s %s' % (x, w))\n\nprint('-'*40)\nprint(' TextRank')\nprint('-'*40)\n\nfor x, w in jieba.analyse.textrank(s, withWeight=True):\n    print('%s %s' % (x, w))\n```\noutput :\n```\n内核 1.0625279118105262\n操作系统 0.7315222629276317\n外壳 0.4645002019336842\n软件程序 0.36580730663157895\n软件资源 0.34756659135263157\n程序 0.3333060550794737\n操作界面 0.32345367735526315\nOperation 0.31459914481315787\nSystem 0.31459914481315787\nOS 0.31459914481315787\n计算机硬件 0.2800679240526316\n应用程序 0.2763021123763158\n计算机系统 0.23982068182078944\n交互 0.23731251919447366\n基石 0.23595272944342105\n硬件 0.22168984473789474\n本质 0.18271527055526315\n用户 0.1795351598005263\n计算机 0.1790732744968421\n围绕 0.177282393885\n----------------------------------------\n TextRank\n----------------------------------------\n内核 1.0\n程序 0.5362199524590612\n系统 0.48948949335129555\n提供 0.48602227553244165\n围绕 0.4446670737747918\n运行 0.4225011310851474\n管理 0.4151898395341863\n基石 0.4131936048253403\n计算机系统 0.38302557644090945\n硬件 0.36775003601316436\n操作 0.36615155530109056\n本质 0.3554627436547271\n计算机硬件 0.3491604047032015\n理解 0.3433887505596043\n外壳 0.3419635842574655\n应用程序 0.33616306371021853\n用户 0.33122514947879544\n交互 0.3287196036788538\n计算机 0.23122054865622482\n简称 0.22777433887730136\n```\n####   4) 词性标注\n* `jieba.posseg.POSTokenizer(tokenizer=None)` 新建自定义分词器，`tokenizer` 参数可指定内部使用的 `jieba.Tokenizer` 分词器。`jieba.posseg.dt` 为默认词性标注分词器。\n* 标注句子分词后每个词的词性，采用和 ictclas 兼容的标记法。\n* 用法示例\n```python\nwords = jieba.posseg.cut(\"我爱北京天安门\")\nfor word, flag in words:\n    print('%s %s' % (word, flag))\nprint('='*40)\n```\noutput :\n```\n我 r\n爱 v\n北京 ns\n天安门 ns\n```\n####   5) 并行分词\n* 原理：将目标文本按行分隔后，把各行文本分配到多个 Python 进程并行分词，然后归并结果，从而获得分词速度的可观提升\n* 基于 python 自带的 multiprocessing 模块，目前暂不支持 Windows\n* 用法：\n    * `jieba.enable_parallel(4)` # 开启并行分词模式，参数为并行进程数\n    * `jieba.disable_parallel()` # 关闭并行分词模式\n\n####   6) Tokenize：返回词语在原文的起止位置\n* 注意，输入参数只接受 unicode\n* 默认模式\n```python\nprint(' 默认模式')\nprint('-'*40)\nresult = jieba.tokenize('永和服装饰品有限公司')\nfor tk in result:\n    print(\"word %s\\t\\t start: %d \\t\\t end:%d\" % (tk[0],tk[1],tk[2]))\n\nprint('-'*40)\nprint(' 搜索模式')\nprint('-'*40)\n\nresult = jieba.tokenize('永和服装饰品有限公司', mode='search')\nfor tk in result:\n    print(\"word %s\\t\\t start: %d \\t\\t end:%d\" % (tk[0],tk[1],tk[2]))\n```\noutput :\n```\nword 永和\t\t start: 0 \t\t end:2\nword 服装\t\t start: 2 \t\t end:4\nword 饰品\t\t start: 4 \t\t end:6\nword 有限公司\t\t start: 6 \t\t end:10\n----------------------------------------\n 搜索模式\n----------------------------------------\nword 永和\t\t start: 0 \t\t end:2\nword 服装\t\t start: 2 \t\t end:4\nword 饰品\t\t start: 4 \t\t end:6\nword 有限\t\t start: 6 \t\t end:8\nword 公司\t\t start: 8 \t\t end:10\nword 有限公司\t\t start: 6 \t\t end:10\n```\n\n### 5、一个完整的分词可运行实例\n目录结构\n\u003e jieba是我们要导入的第三方库，在项目中我直接把它放在了里面。\n```\n│  run.py\n│\n└─jieba\n    │  dict.txt\n    │  _compat.py\n    │  __init__.py\n    │  __main__.py\n    │\n    ├─analyse\n    │  │  analyzer.py\n    │  │  idf.txt\n    │  │  textrank.py\n    │  │  tfidf.py\n    │  │  __init__.py\n    │  │\n    │  └─__pycache__\n    │          analyzer.cpython-37.pyc\n    │          textrank.cpython-37.pyc\n    │          tfidf.cpython-37.pyc\n    │          __init__.cpython-37.pyc\n    │\n    ├─finalseg\n    │  │  prob_emit.p\n    │  │  prob_emit.py\n    │  │  prob_start.p\n    │  │  prob_start.py\n    │  │  prob_trans.p\n    │  │  prob_trans.py\n    │  │  __init__.py\n    │  │\n    │  └─__pycache__\n    │          prob_emit.cpython-37.pyc\n    │          prob_start.cpython-37.pyc\n    │          prob_trans.cpython-37.pyc\n    │          __init__.cpython-37.pyc\n    │\n    ├─posseg\n    │  │  char_state_tab.p\n    │  │  char_state_tab.py\n    │  │  prob_emit.p\n    │  │  prob_emit.py\n    │  │  prob_start.p\n    │  │  prob_start.py\n    │  │  prob_trans.p\n    │  │  prob_trans.py\n    │  │  viterbi.py\n    │  │  __init__.py\n    │  │\n    │  └─__pycache__\n    │          char_state_tab.cpython-37.pyc\n    │          prob_emit.cpython-37.pyc\n    │          prob_start.cpython-37.pyc\n    │          prob_trans.cpython-37.pyc\n    │          viterbi.cpython-37.pyc\n    │          __init__.cpython-37.pyc\n    │\n    └─__pycache__\n            _compat.cpython-37.pyc\n            __init__.cpython-37.pyc\n```\n\nrun.py中编写代码，并且调用jieba库实现分词。\n\nrun.py\n```python\n#encoding=utf-8\nfrom __future__ import unicode_literals\nimport jieba\n\nif __name__==\"__main__\":\n    ch = input()\n    seg_list = jieba.cut(str(ch))\n    print(\", \".join(seg_list))\n```\n在此处输入\"我马上就要有女朋友了\"。\n\n即可得到输出结果如下。\n\u003e 我, 马上, 就要, 有, 女朋友, 了\n\n### 6、代码地址\n    Github : [https://github.com/CasterWx/python-girlfriend-mood](https://github.com/CasterWx/python-girlfriend-mood)\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCasterWx%2Fpython-girlfriend-mood","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCasterWx%2Fpython-girlfriend-mood","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCasterWx%2Fpython-girlfriend-mood/lists"}