{"id":15905035,"url":"https://github.com/huangcongqing/query_analysis","last_synced_at":"2025-09-11T09:36:27.923Z","repository":{"id":107569590,"uuid":"130557803","full_name":"HuangCongQing/query_analysis","owner":"HuangCongQing","description":"自然语言处理（NLP） 语句抽取","archived":false,"fork":false,"pushed_at":"2018-05-27T13:23:40.000Z","size":177,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-13T13:04:10.583Z","etag":null,"topics":["nlp","python2","python27"],"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/HuangCongQing.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-22T10:37:56.000Z","updated_at":"2023-02-17T06:29:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"b0345b57-9736-4edc-b9aa-4ad435bfdee1","html_url":"https://github.com/HuangCongQing/query_analysis","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/HuangCongQing/query_analysis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangCongQing%2Fquery_analysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangCongQing%2Fquery_analysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangCongQing%2Fquery_analysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangCongQing%2Fquery_analysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HuangCongQing","download_url":"https://codeload.github.com/HuangCongQing/query_analysis/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HuangCongQing%2Fquery_analysis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274609465,"owners_count":25316621,"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","status":"online","status_checked_at":"2025-09-11T02:00:13.660Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["nlp","python2","python27"],"created_at":"2024-10-06T13:00:25.400Z","updated_at":"2025-09-11T09:36:27.899Z","avatar_url":"https://github.com/HuangCongQing.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QueryAnalysis(python2X),不是python3X\nChanged by [ChungKing](https://github.com/HuangCongQing/query_analysis)\n\n当前业界文本语义信息抽取基本是使用正则表达式来完成的，正则表达式本身并不提供管理与测试功能。  \n在进行基于正则的文本语义抽取的时候，还需要做大量的基础工作，来便于编写、管理和测试正则表达式。  \n本项目提供大量底层与框架支持，便于使用者方便的编写，管理与测试大批量的正则表达式，以支持高效稳定的语义抽取服务。  \n### 项目初始化\n```\npip install -r requirements\n\npython main.py\n```\n\n\n### ERROR\n* [UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 11: illegal multibyte sequence](https://github.com/HuangCongQing/query_analysis/issues/1)\n\n\n## 本项目由3块组成 ##\n* 1.词典（用于组织需要被正则模板使用的底层词库）  \n* 2.正则语义模板（根据不同业务编写的一组正则表达式）  \n* 3.框架与lib包（用于加载正则表达式完成对输入文本的语义抽取）  \n\n## 1.词典模块 ##\n词典模块位于dict目录  \n对于需要公共使用的词典放到common目录里，其它各语义需要使用的词典放到各自的目录中  \n词典模块中的词典文件使用csv文件格式  \n词典内容支持多列形式，支持对词典中每个词添加一个或多个属性（词典中用,分隔）  \n对于写成的词典需要在/dict/dict.py中加载上来，供正则模板使用  \n方法如下：  \n方法一：加载不带属性  \n\u003e\t\tstop_words = WordsDict(  \n\u003e\t\t    './dict/common/stop_words.csv')  \n\n方法二：加载带属性的字典（字典中用逗号分隔的）  \n\u003e\t\tanimal_name = WordsDict(  \n\u003e\t\t    './dict/animal/animal.csv',  \n\u003e\t\t    property_name_list=['arid'],  \n\u003e\t\t    group_name='animal')  \n\nproperty_name_list参数，指定逗号分隔，依次第n个参数返回时的字段名  \ngroup_name参数，指定被命中的信息，在字典中返回的key名  \n如：我要看老虎，这句老虎在字典中定义如下：  \n\u003e老虎,1  \n\u003e被正则命中后取得的返回结果中就会包含如下信息：  \n\u003e{'arid': '1', 'animal': '老虎'}  \n\n## 2.正则语义模板 ##\n正则语义模板位于/nlu目录  \nmedia目录是指用于需播放的信息，如相声，戏曲，动画，故事等，这类播放结构较为类似，故放在同一目录下\n使用/nlu/media/common提取公共部分，在各模块内部只完成各自不同的信息即可。  \nsmart目录下是指智能硬件的模块。  \n\n在/nlu目录下的其它模块，每个模块均代表1种语义  \n每个正则语义模块下有2个需要添加的内容：  \n1.service属性，这个属性指明这个类是代表什么语义的，在输入文本命中本类中包含的正则语义后，  \n返回的信息里会包含这个service属性。  \n2.nlu.rule.Rule对象，这个对象中包含的正则表达式信息，框架会用来对输入文本进行匹配。  \n\n## 3.框架与lib包 ##\n当包含有正则表达式的语义类完成之后，需要把这个类注册到框架中去，方法如下：  \n\u003e\t\timport nlu.animal as animal  \n\u003e\t\tfrom nlu.nlu_framework import Nlu_Framework  \n\u003e\t\tNlu_Framework.register(animal.Animal)  \n这样框架就可以用Animal类里的Rule对象所指定的正则变量来处理输入文本了  \n\n使用框架匹配正则模块如下：  \n\u003e\t\tmatch_dict_list = Nlu_Framework.match('我想看老虎')  \n\u003e\t\tprint  match_dict_list[0].items()  \n\n输出如下：  \n\u003e\t\t[('operation', 'query'), ('service', 'animal'),  \n\u003e\t\t('parameters', {'arid': '1', 'rule': '5', 'animal': '\\xe8\\x80\\x81\\xe8\\x99\\x8e'})]  \n\nlib包里提供了一些在完成正则语义编写常用的函数\n\u003e\t\tattach_name函数：对指定正则附加一个名字属性，当命中这个正则时会返回这个属性  \n\u003e\t\tattach_perperty函数：对指定的正则表达式附加一个属性，当命中此正则时返回这个属性  \n\u003e\t\te函数：表示正则里的可出现也可不出现（({})?）  \n\u003e\t\to函数：表示正则里的或条件（({a|b})）  \n\u003e\t\tr函数：表示正则里的重复  \n\n#Docker支持#\n本项目支持在docker容器中运行  \n方法1(自制镜象)：  \n* 1.进入本目录  \n* 2.docker build -t query_analysis .  \n* 3.docker run --rm --name query_analysis --net=host hub.c.163.com/yufeiok/query_analysis  \n\n方法2(直接下载镜象)：  \n* 1.docker pull hub.c.163.com/yufeiok/query_analysis:latest  \n* 2.docker run --rm --name query_analysis --net=host hub.c.163.com/yufeiok/query_analysis  \n* 3.curl '127.0.0.1:8700/interpreter/info?speech=%E6%88%91%E8%A6%81%E7%9C%8B%E8%80%81%E8%99%8E\u0026robot_code=0'（测试）  \n\n这就可以直接在本机的8700端口进行测试了，返回结果如下：  \ncurl '127.0.0.1:8700/interpreter/info?speech=%E6%88%91%E8%A6%81%E7%9C%8B%E8%80%81%E8%99%8E\u0026robot_code=0' (发送文本：我要看老虎)  \n\n返回结果：  \n{\"msg\": \"OK\", \"body\": {\"operation\": \"query\", \"service\": \"animal\", \"parameters\": {\"arid\": \"1\", \"rule\": \"5\", \"animal\":   \"\\u8001\\u864e\"}}, \"code\": 0}  \n\n#使用方法#\n* 1.编写用于提取语义的类，如下所示：  \n\u003e\t\tusage.py  \n\u003e\t\tclass Test(object):  \n\u003e\t\t     # 标识是test领域(这个service字段必须存在，命中本类中正则时，会输出这个字段)  \n\u003e\t\t     service = 'test'  \n\u003e\t\t     # 表示抓取2个字长度的信息,输出字段为name  \n\u003e\t\t     name = range_tag(2, 'user_name')\n\u003e\t\t     # 正则规则：我的名字是小明\n\u003e\t\t     name_case1 = '我的名字是' + name\n\u003e\t\t     # 生成规则对象（附加的参数会在输出结果中被输出，operation代表具体的操作）\n\u003e\t\t     rule_case1 = Rule(attach_perperty(name_case1, {'operation': 'query', 'rule': 1}))\n\n* 2.把本类注册到NLU框架中  \n\u003e\t\tfrom nlu.nlu_framework import Nlu_Framework  \n\u003e\t\tNlu_Framework.register(Test)  \n\n* 3.使用规则来处理输入文本  \n\u003e\t\tmatch_dict_list = Nlu_Framework.match('我的名字是小明')  \n\u003e\t\tfor k, v in match_dict_list[0].items():  \n\u003e\t\t\tprint '{} : {}'.format(k, v)  \n\n* 4.输出结果如下：  \n\u003e\t\toperation : query  \n\u003e\t\tservice : test  \n\u003e\t\tparameters : {'user_name': '\\xe5\\xb0\\x8f\\xe6\\x98\\x8e', 'rule': '1'}  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuangcongqing%2Fquery_analysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhuangcongqing%2Fquery_analysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuangcongqing%2Fquery_analysis/lists"}