日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【NLP】darmatch: 一个非常高效的多模式字符串匹配工具

發(fā)布時(shí)間:2025/3/12 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP】darmatch: 一个非常高效的多模式字符串匹配工具 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

darmatch 是一個(gè)非常高效的字符串匹配工具,支持正向/反向最大匹配分詞和多模式字符串精確匹配:

  • 僅包含頭文件 (header-only)

  • 基于雙數(shù)組字典樹(shù) (double-array trie) 的模式匹配

  • 支持 C++ 和 Python

GitHub:?

https://github.com/zejunwang1/darmatch

C++

使用示例可以參考 tests 文件夾中的 test.cpp:

#include?<iostream> #include?<darmatch.h>int?main(int?argc,?char**?argv)?{std::vector<std::string>?args(argv,?argv?+?argc);std::string?dict_path,?user_dict_path;for?(int?i?=?1;?i?<?args.size();?i?+=?2)?{if?(args[i]?==?"--dict_path")?{dict_path?=?std::string(args.at(i?+?1));}?else?if?(args[i]?==?"--user_dict_path")?{user_dict_path?=?std::string(args.at(i?+?1));}?else?{std::cout?<<?"Unknown?argument:?"?<<?args[i]?<<?std::endl;std::cout?<<?"Supported?argument:?--dict_path?--user_dict_path"?<<?std::endl;exit(EXIT_FAILURE);}}/*initialization?methods:darmatch::DarMatch?da;darmatch::DarMatch?da(dict_path,?user_dict_path?=?"");*/darmatch::DarMatch?da(dict_path,?user_dict_path);std::string?text?=?"俄羅斯聯(lián)邦總統(tǒng)普京決定在頓巴斯地區(qū)開(kāi)展特別軍事行動(dòng)。";/*maximum?forward?matching:std::vector<std::pair<size_t,?std::string>>?fwords?=?da.seg(text);----------------------------------------------std::vector<std::pair<size_t,?std::string>>?fwords;da.seg(text,?fwords);*/std::vector<std::pair<size_t,?std::string>>?fwords?=?da.seg(text);std::cout?<<?"The?Chinese?word?segmentation?based?on?Maximum?Forward?Matching:?"?<<?std::endl;for?(size_t?i?=?0;?i?<?fwords.size();?i++)?{std::cout?<<?fwords[i].second?<<?"?";}std::cout?<<?std::endl;/*maximum?backward?matching:std::vector<std::pair<size_t,?std::string>>?bwords?=?da.seg(text,?false);------------------------------------------------------std::vector<std::pair<size_t,?std::string>>?bwords;da.seg(text,?bwords,?false);*/std::vector<std::pair<size_t,?std::string>>?bwords?=?da.seg(text,?false);std::cout?<<?"The?Chinese?word?segmentation?based?on?Maximum?Backward?Matching:?"?<<?std::endl;for?(size_t?i?=?0;?i?<?bwords.size();?i++)?{std::cout?<<?bwords[i].second?<<?"?";}std::cout?<<?std::endl;/*update?the?double-array?trie?by?insert:da.insert(const?std::string&);da.insert(const?std::vector<std::string>&);*/da.insert("俄羅斯聯(lián)邦總統(tǒng)");//?multi-pattern?string?matchingstd::vector<std::pair<size_t,?std::string>>?result?=?da.parse(text);std::cout?<<?"The?result?of?multi-pattern?string?matching:?"?<<?std::endl;for?(size_t?i?=?0;?i?<?result.size();?i++)?{std::cout?<<?result[i].first?<<?"\t"?<<?result[i].second?<<?std::endl;?}return?0; }

通過(guò) cmake 進(jìn)行編譯:

git?clone?https://github.com/zejunwang1/darmatch cd?darmatch mkdir?build && cd build cmake?.. #?cmake?-DUSE_PREFIX_TRIE=ON?.. make

執(zhí)行上述命令后,會(huì)在 darmatch/build 文件夾中生成可執(zhí)行文件 test。

./test?--dict_path?../tests/dict.txt

運(yùn)行后結(jié)果如下:

The?Chinese?word?segmentation?based?on?Maximum?Forward?Matching:? 俄羅斯聯(lián)邦?總統(tǒng)?普京?決定?在?頓巴斯地區(qū)?開(kāi)展?特別?軍事行動(dòng)?。? The?Chinese?word?segmentation?based?on?Maximum?Backward?Matching:? 俄羅斯?聯(lián)邦總統(tǒng)?普京?決定?在?頓巴斯地區(qū)?開(kāi)展?特別?軍事行動(dòng)?。? The?result?of?multi-pattern?string?matching:? 0????俄羅斯聯(lián)邦 0????俄羅斯聯(lián)邦總統(tǒng) 9????聯(lián)邦總統(tǒng) 21????普京 27????決定 36????頓巴斯地區(qū) 51????開(kāi)展 63????軍事行動(dòng)

Python

Requirements

  • Python version >= 3.6

  • pybind11 >= 2.2

  • setuptools >= 0.7.0

  • typing

Installation

通過(guò) pip 命令直接安裝:

pip?install?darmatch

或者從 github 倉(cāng)庫(kù)中獲取最新版本安裝:

git?clone?https://github.com/zejunwang1/darmatch cd?darmatch pip?install?. #?or: python?setup.py?install

Demo

from?darmatch?import?DarMatch da?=?DarMatch() #?da?=?DarMatch(dict_path,?user_dict_path="") words?=?["俄羅斯聯(lián)邦",?"聯(lián)邦總統(tǒng)",?"普京",?"決定",?"頓巴斯地區(qū)",?"開(kāi)展",?"軍事行動(dòng)"] da.insert(words) text?=?"俄羅斯聯(lián)邦總統(tǒng)普京決定在頓巴斯地區(qū)開(kāi)展特別軍事行動(dòng)。"#?maximum?forward?matching word_list?=?da.seg(text,?forward=True,?return_loc=True) print("The?Chinese?word?segmentation?based?on?Maximum?Forward?Matching:") print(word_list)#?maximum?backward?matching word_list?=?da.seg(text,?forward=False,?return_loc=True) print("The?Chinese?word?segmentation?based?on?Maximum?Backward?Matching:") print(word_list)#?multi-pattern?string?matching da.insert("俄羅斯聯(lián)邦總統(tǒng)") word_list?=?da.parse(text,?char_loc=True) print("The?result?of?multi-pattern?string?matching:") print(word_list)

運(yùn)行結(jié)果如下:

The?Chinese?word?segmentation?based?on?Maximum?Forward?Matching: [(0,?'俄羅斯聯(lián)邦'),?(5,?'總統(tǒng)'),?(7,?'普京'),?(9,?'決定'),?(11,?'在'),?(12,?'頓巴斯地區(qū)'),?(17,?'開(kāi)展'),?(19,?'特別'),?(21,?'軍事行動(dòng)'),?(25,?'。')] The?Chinese?word?segmentation?based?on?Maximum?Backward?Matching: [(0,?'俄羅斯'),?(3,?'聯(lián)邦總統(tǒng)'),?(7,?'普京'),?(9,?'決定'),?(11,?'在'),?(12,?'頓巴斯地區(qū)'),?(17,?'開(kāi)展'),?(19,?'特別'),?(21,?'軍事行動(dòng)'),?(25,?'。')] The?result?of?multi-pattern?string?matching: [(0,?'俄羅斯聯(lián)邦'),?(0,?'俄羅斯聯(lián)邦總統(tǒng)'),?(3,?'聯(lián)邦總統(tǒng)'),?(7,?'普京'),?(9,?'決定'),?(12,?'頓巴斯地區(qū)'),?(17,?'開(kāi)展'),?(21,?'軍事行動(dòng)')]

Speed

和基于 Aho-Corasick 的字符串匹配正則表達(dá)式工具 esmre 進(jìn)行處理速度對(duì)比。可以使用 pip 命令安裝 esmre:

pip?install?esmre

在 tests 文件夾中包含字符串匹配需要用到的關(guān)鍵詞詞典文件 string_match_dict.txt,共計(jì)有 348982 個(gè)關(guān)鍵詞。待進(jìn)行匹配的文本字符串文件 check_text.txt,共計(jì)有 273864 個(gè)字符。

python?test_speed.py

運(yùn)行后結(jié)果如下:

the?number?of?matching?results?by?esm:??343623 esm?time?usage:?0.4515085220336914s ---------------------------------------------------- the?number?of?matching?results?by?darmatch:??343623 darmatch?time?usage:?0.1248319149017334s121s

可以看出,darmatch 比 esm 快 3~4 倍左右。

Contact

郵箱:wangzejunscut@126.com
微信:autonlp

往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線及資料下載(圖文+視頻)機(jī)器學(xué)習(xí)入門(mén)系列下載中國(guó)大學(xué)慕課《機(jī)器學(xué)習(xí)》(黃海廣主講)機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)交流qq群955171419,加入微信群請(qǐng)掃碼:

總結(jié)

以上是生活随笔為你收集整理的【NLP】darmatch: 一个非常高效的多模式字符串匹配工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91性色| 波多野结衣中文字幕一区二区 | 日韩在线视频网址 | 火影黄动漫免费网站 | 成人在线观看国产 | 亚洲一区二区电影网 | 欧美另类极品 | 韩国无码av片在线观看网站 | 天天免费看av | 制服丝袜中文字幕在线 | 国产日韩精品中文字无码 | 精品欧美乱码久久久久久 | 小视频免费在线观看 | 国av在线| 国产a免费| 吃奶在线观看 | 九九热视频精品 | 亚洲天堂小视频 | 嫩草视频在线 | 91一区二区三区在线 | 色黄网站在线观看 | 韩国三级中文字幕hd浴缸戏 | 国产精品99无码一区二区 | 亚洲色欧美另类 | 日本大奶视频 | 91欧美亚洲 | 国产精品无码在线播放 | 国产午夜福利片 | 浪潮av网站 | 国产伦精品一区二区三区免.费 | 黑料福利| 超碰2021| 日本二区在线观看 | 欧美二区在线观看 | jizz欧美性23 | 欧美深性狂猛ⅹxxx深喉 | 国产网站在线看 | 欧美福利电影 | 91免费版黄 | 婷婷五月综合激情 | 欧美激情一区二区三级高清视频 | avtt香蕉久久 | 成人黄色激情小说 | 亚洲骚图 | 中文无码av一区二区三区 | 在线免费三级 | 蜜桃久久久久久久 | 国产精品久久久久无码av | 另类综合小说 | 免费一级片网址 | 在线播放中文字幕 | 亚洲一区二区动漫 | 欧美精品一区二区三区四区五区 | 另类色综合 | 成人做爰www免费看视频网站 | 蜜臀av色欲a片无码精品一区 | 91喷水| 国产亚洲精品久久久久久久久动漫 | 可以在线观看的av网站 | 欧美性潮喷xxxxx免费视频看 | 日本人xxxxxxxxx泡妞 | 中文字幕高清 | 殴美黄色大片 | 欧美在线一级片 | 国产丝袜第一页 | 免费黄色三级网站 | 女人扒开屁股让我添 | 日韩一级视频 | 91久久精品日日躁夜夜躁国产 | 成人网站免费观看 | 自拍偷拍视频网站 | 亚洲av综合色区无码一区爱av | 三级视频网 | 欧洲日韩一区二区三区 | 欧美混交群体交 | 国产第八页 | 色网站免费在线观看 | 四川话毛片少妇免费看 | 亚洲视频www| 超碰黑丝 | 黑人毛片网站 | 午夜视频入口 | 一区二区三区精品久久久 | 青青青在线免费观看 | 这里只有精品6 | 草草影院最新网址 | 国产精品视频网址 | 久久精品国产亚洲av高清色欲 | 91色伦| 国产精品一 | 欧美成人一区二区三区高清 | 亚洲丝袜色图 | 色视频2| 古代玷污糟蹋np高辣h文 | 国产av国片精品 | 四虎成人精品永久免费av | 国产伦精品一区二区三区视频网站 | 国产最新在线观看 | 久久高清国产 |