|
|
import pytest
|
|
|
|
|
|
from pypinyin import pinyin, load_phrases_dict
|
|
|
from pypinyin.seg import mmseg
|
|
|
|
|
|
seg_test = mmseg.Seg(mmseg.PrefixSet())
|
|
|
# yapf: disable
|
|
|
seg_test._prefix_set.train([
|
|
|
'a',
|
|
|
'ab',
|
|
|
'abc',
|
|
|
'abcd',
|
|
|
'abd',
|
|
|
'ac',
|
|
|
'acd',
|
|
|
'aff',
|
|
|
'agf',
|
|
|
'agfgef',
|
|
|
'asdf',
|
|
|
'bbs'
|
|
|
'中国',
|
|
|
'中国人',
|
|
|
'中国人民',
|
|
|
'中国人民银行',
|
|
|
'我',
|
|
|
'北京',
|
|
|
'天安门',
|
|
|
'员工',
|
|
|
])
|
|
|
# yapf: enable
|
|
|
|
|
|
|
|
|
# yapf: disable
|
|
|
@pytest.mark.parametrize(
|
|
|
'input, expect', [
|
|
|
['', []],
|
|
|
['a', ['a']],
|
|
|
['abc', ['abc']],
|
|
|
['abcefg', ['abc', 'e', 'f', 'g']],
|
|
|
['bbcabce', ['bb', 'c', 'abc', 'e']],
|
|
|
['北京', ['北京']],
|
|
|
['北京,', ['北京', ',']],
|
|
|
['北京abc', ['北京', 'abc']],
|
|
|
['中国人民银行行长', ['中国人民银行', '行', '长']],
|
|
|
['中国人民银行员工', ['中国人民银行', '员工']],
|
|
|
[
|
|
|
'abcadbasfgafgasdabcagfaff我是中国人中国人民我爱北京天安门',
|
|
|
[
|
|
|
'abc',
|
|
|
'a',
|
|
|
'd',
|
|
|
'b',
|
|
|
'as',
|
|
|
'f',
|
|
|
'g',
|
|
|
'af',
|
|
|
'g',
|
|
|
'asd',
|
|
|
'abc',
|
|
|
'agf',
|
|
|
'aff',
|
|
|
'我',
|
|
|
'是',
|
|
|
'中国人',
|
|
|
'中国人民',
|
|
|
'我',
|
|
|
'爱',
|
|
|
'北京',
|
|
|
'天安门',
|
|
|
],
|
|
|
],
|
|
|
]
|
|
|
)
|
|
|
# yapf: enable
|
|
|
def test_mmseg(input, expect):
|
|
|
assert list(seg_test.cut(input)) == expect
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('input, default_ret, mmseg_ret', [
|
|
|
[
|
|
|
'一语中的啊',
|
|
|
[['yī'], ['yǔ'], ['zhōng'], ['de'], ['a']],
|
|
|
[['yī'], ['yǔ'], ['zhòng'], ['dì'], ['a']],
|
|
|
],
|
|
|
])
|
|
|
def test_mmseg_for_pinyin(input, default_ret, mmseg_ret):
|
|
|
assert pinyin(input) == mmseg_ret
|
|
|
assert pinyin(mmseg.seg.cut(input)) == mmseg_ret
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('input, jieba_ret, mmseg_ret', [
|
|
|
[
|
|
|
'了局啊',
|
|
|
[['le'], ['jú'], ['a']],
|
|
|
[['liǎo'], ['jú'], ['a']],
|
|
|
],
|
|
|
])
|
|
|
def test_mmseg_and_jieba_for_pinyin(input, jieba_ret, mmseg_ret):
|
|
|
assert pinyin(input) == mmseg_ret
|
|
|
assert pinyin(mmseg.seg.cut(input)) == mmseg_ret
|
|
|
|
|
|
|
|
|
def test_retrain():
|
|
|
seg = mmseg.seg
|
|
|
assert list(seg.cut('啊啊啊')) == ['啊', '啊', '啊']
|
|
|
|
|
|
load_phrases_dict({'啊啊啊': [['a'], ['a'], ['a']]})
|
|
|
mmseg.retrain(seg)
|
|
|
assert list(seg.cut('啊啊啊')) == ['啊啊啊']
|
|
|
|
|
|
assert list(seg.cut('男孩儿')) == ['男孩儿']
|
|
|
|
|
|
|
|
|
def test_phrases():
|
|
|
seg = mmseg.seg
|
|
|
assert list(seg.cut('你要重新考虑这条建议')) == \
|
|
|
['你', '要', '重新', '考', '虑', '这', '条', '建', '议']
|
|
|
load_phrases_dict({'在一起': [['zài'], ['yì'], ['qǐ']]})
|
|
|
assert list(seg.cut('在一片')) == ['在', '一片']
|
|
|
|
|
|
# 前缀匹配,后缀是词语
|
|
|
#
|
|
|
# 输入头部是另外一个词语的头部,会匹配其他词语的前缀
|
|
|
# 输入尾部是一个词语
|
|
|
# 此时这个尾部词语要被分词出来
|
|
|
assert list(seg.cut('行业')) == ['行业']
|
|
|
assert list(seg.cut('金融行业')) == ['金', '融', '行业']
|
|
|
# 整个是词语
|
|
|
assert list(seg.cut('金融寡头')) == ['金融寡头']
|
|
|
assert list(seg.cut('服务行业')) == ['服务行业']
|
|
|
assert list(seg.cut('人员')) == ['人员']
|
|
|
assert list(seg.cut('服务人员')) == ['服务', '人员']
|
|
|
|
|
|
assert list(seg.cut('银行')) == ['银行']
|
|
|
assert list(seg.cut('浦发银行')) == ['浦', '发', '银行']
|
|
|
|
|
|
assert list(seg.cut('')) == []
|
|
|
# 整个匹配前缀,但是不是词语
|
|
|
assert list(seg.cut('金')) == ['金']
|
|
|
assert list(seg.cut('金融')) == ['金', '融']
|
|
|
#
|
|
|
assert list(seg.cut('金融金')) == ['金', '融', '金']
|
|
|
assert list(seg.cut('金融金融')) == ['金', '融', '金', '融']
|
|
|
assert list(seg.cut('金融金融金融金融金融金融')) == [
|
|
|
'金', '融', '金', '融', '金', '融', '金', '融', '金', '融', '金', '融'
|
|
|
]
|
|
|
assert list(seg.cut('金融金融金融金融金融金融金')) == [
|
|
|
'金', '融', '金', '融', '金', '融', '金', '融', '金', '融', '金', '融', '金'
|
|
|
]
|
|
|
|
|
|
# 没有任何匹配
|
|
|
assert list(
|
|
|
seg.cut('以其昏昏,使人昭昭')) == ['以', '其', '昏', '昏', ',', '使', '人', '昭', '昭']
|
|
|
|
|
|
# 前缀无任何匹配, 后缀是词语
|
|
|
assert list(seg.cut('以其昏昏行业')) == ['以', '其', '昏', '昏', '行业']
|
|
|
|
|
|
# 前缀是词语
|
|
|
assert list(seg.cut('行业以其昏昏')) == ['行业', '以', '其', '昏', '昏']
|
|
|
|
|
|
# 中间是词语
|
|
|
assert list(seg.cut('使人昭昭行业以其昏昏')) == [
|
|
|
'使', '人', '昭', '昭', '行业', '以', '其', '昏', '昏'
|
|
|
]
|
|
|
|
|
|
|
|
|
# yapf: disable
|
|
|
def test_seg_long():
|
|
|
seg = mmseg.seg
|
|
|
assert list(seg.cut(''' 真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血。
|
|
|
这是怎样的哀痛者和幸福者?然而造化又常常为庸人设计,以时间的流驶,来洗涤旧迹,
|
|
|
仅使留下淡红的血色和微漠的悲哀。在这淡红的血色和微漠的悲哀中,又给人暂得偷生,
|
|
|
维持着这似人非人的世界。我不知道这样的世界何时是一个尽头!
|
|
|
我们还在这样的世上活着;我也早觉得有写一点东西的必要了。离三月十八日也已有两星期,
|
|
|
忘却的救主快要降临了罢,我正有写一点东西的必要了。''')) == [
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
'真',
|
|
|
'的',
|
|
|
'猛',
|
|
|
'士',
|
|
|
',',
|
|
|
'敢',
|
|
|
'于',
|
|
|
'直',
|
|
|
'面',
|
|
|
'惨',
|
|
|
'淡',
|
|
|
'的',
|
|
|
'人',
|
|
|
'生',
|
|
|
',',
|
|
|
'敢',
|
|
|
'于',
|
|
|
'正视',
|
|
|
'淋',
|
|
|
'漓',
|
|
|
'的',
|
|
|
'鲜血',
|
|
|
'。',
|
|
|
'\n',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
'这',
|
|
|
'是',
|
|
|
'怎',
|
|
|
'样',
|
|
|
'的',
|
|
|
'哀',
|
|
|
'痛',
|
|
|
'者',
|
|
|
'和',
|
|
|
'幸',
|
|
|
'福',
|
|
|
'者',
|
|
|
'?',
|
|
|
'然',
|
|
|
'而',
|
|
|
'造化',
|
|
|
'又',
|
|
|
'常',
|
|
|
'常',
|
|
|
'为',
|
|
|
'庸',
|
|
|
'人',
|
|
|
'设',
|
|
|
'计',
|
|
|
',',
|
|
|
'以',
|
|
|
'时间',
|
|
|
'的',
|
|
|
'流',
|
|
|
'驶',
|
|
|
',',
|
|
|
'来',
|
|
|
'洗涤',
|
|
|
'旧',
|
|
|
'迹',
|
|
|
',',
|
|
|
'\n',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
'仅',
|
|
|
'使',
|
|
|
'留',
|
|
|
'下',
|
|
|
'淡',
|
|
|
'红',
|
|
|
'的',
|
|
|
'血色',
|
|
|
'和',
|
|
|
'微',
|
|
|
'漠',
|
|
|
'的',
|
|
|
'悲',
|
|
|
'哀',
|
|
|
'。',
|
|
|
'在',
|
|
|
'这',
|
|
|
'淡',
|
|
|
'红',
|
|
|
'的',
|
|
|
'血色',
|
|
|
'和',
|
|
|
'微',
|
|
|
'漠',
|
|
|
'的',
|
|
|
'悲',
|
|
|
'哀',
|
|
|
'中',
|
|
|
',',
|
|
|
'又',
|
|
|
'给',
|
|
|
'人',
|
|
|
'暂',
|
|
|
'得',
|
|
|
'偷',
|
|
|
'生',
|
|
|
',',
|
|
|
'\n',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
'维',
|
|
|
'持',
|
|
|
'着',
|
|
|
'这',
|
|
|
'似',
|
|
|
'人',
|
|
|
'非',
|
|
|
'人',
|
|
|
'的',
|
|
|
'世',
|
|
|
'界',
|
|
|
'。',
|
|
|
'我',
|
|
|
'不',
|
|
|
'知道',
|
|
|
'这样',
|
|
|
'的',
|
|
|
'世',
|
|
|
'界',
|
|
|
'何时',
|
|
|
'是',
|
|
|
'一个',
|
|
|
'尽头',
|
|
|
'!',
|
|
|
'\n',
|
|
|
'\u3000',
|
|
|
'\u3000',
|
|
|
'我们',
|
|
|
'还',
|
|
|
'在',
|
|
|
'这样',
|
|
|
'的',
|
|
|
'世上',
|
|
|
'活着',
|
|
|
';',
|
|
|
'我',
|
|
|
'也',
|
|
|
'早',
|
|
|
'觉得',
|
|
|
'有',
|
|
|
'写',
|
|
|
'一点',
|
|
|
'东',
|
|
|
'西',
|
|
|
'的',
|
|
|
'必要',
|
|
|
'了',
|
|
|
'。',
|
|
|
'离',
|
|
|
'三',
|
|
|
'月',
|
|
|
'十',
|
|
|
'八',
|
|
|
'日',
|
|
|
'也',
|
|
|
'已',
|
|
|
'有',
|
|
|
'两',
|
|
|
'星期',
|
|
|
',',
|
|
|
'\n',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
' ',
|
|
|
'忘',
|
|
|
'却',
|
|
|
'的',
|
|
|
'救',
|
|
|
'主',
|
|
|
'快要',
|
|
|
'降临',
|
|
|
'了',
|
|
|
'罢',
|
|
|
',',
|
|
|
'我',
|
|
|
'正',
|
|
|
'有',
|
|
|
'写',
|
|
|
'一点',
|
|
|
'东',
|
|
|
'西',
|
|
|
'的',
|
|
|
'必要',
|
|
|
'了',
|
|
|
'。']
|
|
|
|
|
|
assert list(seg.cut(
|
|
|
'人们常常把人与自然对立起来,宣称要征服自然。殊不知在大自然面前,'
|
|
|
'人类永远只是一个天真幼稚的孩童,而他却要作自然的主人!'
|
|
|
'他只是大自然机体上普通的一部分,正像一株小草只是她的普通一部分一样,'
|
|
|
'有什么资格与自然对立! 如果说自然的智慧是大海,那么,'
|
|
|
'人类的智慧就只是大海中的一个小水滴,虽然这个水滴也映照着大海,'
|
|
|
'但毕竟不是大海。可是,人们竟然不自量力 地宣称要用滴水来代替大海。')) == [
|
|
|
'人们',
|
|
|
'常',
|
|
|
'常',
|
|
|
'把',
|
|
|
'人',
|
|
|
'与',
|
|
|
'自',
|
|
|
'然',
|
|
|
'对',
|
|
|
'立',
|
|
|
'起',
|
|
|
'来',
|
|
|
',',
|
|
|
'宣称',
|
|
|
'要',
|
|
|
'征服',
|
|
|
'自',
|
|
|
'然',
|
|
|
'。',
|
|
|
'殊不知',
|
|
|
'在',
|
|
|
'大自然',
|
|
|
'面',
|
|
|
'前',
|
|
|
',',
|
|
|
'人',
|
|
|
'类',
|
|
|
'永',
|
|
|
'远',
|
|
|
'只是',
|
|
|
'一个',
|
|
|
'天',
|
|
|
'真',
|
|
|
'幼',
|
|
|
'稚',
|
|
|
'的',
|
|
|
'孩',
|
|
|
'童',
|
|
|
',',
|
|
|
'而',
|
|
|
'他',
|
|
|
'却',
|
|
|
'要',
|
|
|
'作',
|
|
|
'自',
|
|
|
'然',
|
|
|
'的',
|
|
|
'主',
|
|
|
'人',
|
|
|
'!',
|
|
|
'他',
|
|
|
'只是',
|
|
|
'大自然',
|
|
|
'机体',
|
|
|
'上',
|
|
|
'普',
|
|
|
'通',
|
|
|
'的',
|
|
|
'一',
|
|
|
'部分',
|
|
|
',',
|
|
|
'正像',
|
|
|
'一',
|
|
|
'株',
|
|
|
'小',
|
|
|
'草',
|
|
|
'只是',
|
|
|
'她',
|
|
|
'的',
|
|
|
'普',
|
|
|
'通',
|
|
|
'一',
|
|
|
'部分',
|
|
|
'一',
|
|
|
'样',
|
|
|
',',
|
|
|
'有',
|
|
|
'什么',
|
|
|
'资',
|
|
|
'格',
|
|
|
'与',
|
|
|
'自',
|
|
|
'然',
|
|
|
'对',
|
|
|
'立',
|
|
|
'!',
|
|
|
' ',
|
|
|
'如',
|
|
|
'果',
|
|
|
'说',
|
|
|
'自',
|
|
|
'然',
|
|
|
'的',
|
|
|
'智',
|
|
|
'慧',
|
|
|
'是',
|
|
|
'大海',
|
|
|
',',
|
|
|
'那么',
|
|
|
',',
|
|
|
'人',
|
|
|
'类',
|
|
|
'的',
|
|
|
'智',
|
|
|
'慧',
|
|
|
'就',
|
|
|
'只是',
|
|
|
'大海',
|
|
|
'中的',
|
|
|
'一个',
|
|
|
'小',
|
|
|
'水',
|
|
|
'滴',
|
|
|
',',
|
|
|
'虽',
|
|
|
'然',
|
|
|
'这个',
|
|
|
'水',
|
|
|
'滴',
|
|
|
'也',
|
|
|
'映',
|
|
|
'照',
|
|
|
'着',
|
|
|
'大海',
|
|
|
',',
|
|
|
'但',
|
|
|
'毕',
|
|
|
'竟',
|
|
|
'不是',
|
|
|
'大海',
|
|
|
'。',
|
|
|
'可是',
|
|
|
',',
|
|
|
'人们',
|
|
|
'竟',
|
|
|
'然',
|
|
|
'不自量力',
|
|
|
' ',
|
|
|
'地',
|
|
|
'宣称',
|
|
|
'要',
|
|
|
'用',
|
|
|
'滴',
|
|
|
'水',
|
|
|
'来',
|
|
|
'代',
|
|
|
'替',
|
|
|
'大海',
|
|
|
'。']
|
|
|
|
|
|
assert list(seg.cut(
|
|
|
'该负责人表示,银行保险机构具有外部性强、财务杠杆率高、'
|
|
|
'信息不对称严重等特征,不同于一般工商企业,对其股东股权必须从严管理。'
|
|
|
'总体上,银保监会将坚持“两个不变”。一是坚持鼓励社会资本参与银行保险机构改革、'
|
|
|
'优化股东结构的积极取向不变。银保监会将继续畅通社会资本投资入股银行保险机构的渠道,'
|
|
|
'优化股东结构、充实机构资本,重点引入注重机构长远发展、资本实力雄厚、管理经验'
|
|
|
'丰富的战略性股东。二是坚持严惩股东违法违规行为、规范公司治理的高压态势不变。'
|
|
|
'银保监会将继续深入排查整治违法违规股东股权,依法清理规范股权关系,'
|
|
|
'对股东严重违法违规行为,将坚决予以惩戒,发现一起、查处一起。')) == [
|
|
|
'该',
|
|
|
'负',
|
|
|
'责',
|
|
|
'人',
|
|
|
'表',
|
|
|
'示',
|
|
|
',',
|
|
|
'银行',
|
|
|
'保',
|
|
|
'险',
|
|
|
'机',
|
|
|
'构',
|
|
|
'具有',
|
|
|
'外',
|
|
|
'部',
|
|
|
'性',
|
|
|
'强',
|
|
|
'、',
|
|
|
'财',
|
|
|
'务',
|
|
|
'杠杆',
|
|
|
'率',
|
|
|
'高',
|
|
|
'、',
|
|
|
'信息',
|
|
|
'不对',
|
|
|
'称',
|
|
|
'严重',
|
|
|
'等',
|
|
|
'特',
|
|
|
'征',
|
|
|
',',
|
|
|
'不同',
|
|
|
'于',
|
|
|
'一般',
|
|
|
'工',
|
|
|
'商',
|
|
|
'企',
|
|
|
'业',
|
|
|
',',
|
|
|
'对',
|
|
|
'其',
|
|
|
'股',
|
|
|
'东',
|
|
|
'股',
|
|
|
'权',
|
|
|
'必',
|
|
|
'须',
|
|
|
'从',
|
|
|
'严',
|
|
|
'管',
|
|
|
'理',
|
|
|
'。',
|
|
|
'总体',
|
|
|
'上',
|
|
|
',',
|
|
|
'银',
|
|
|
'保',
|
|
|
'监',
|
|
|
'会',
|
|
|
'将',
|
|
|
'坚',
|
|
|
'持',
|
|
|
'“',
|
|
|
'两个',
|
|
|
'不变',
|
|
|
'”',
|
|
|
'。',
|
|
|
'一',
|
|
|
'是',
|
|
|
'坚',
|
|
|
'持',
|
|
|
'鼓',
|
|
|
'励',
|
|
|
'社会',
|
|
|
'资',
|
|
|
'本',
|
|
|
'参与',
|
|
|
'银行',
|
|
|
'保',
|
|
|
'险',
|
|
|
'机',
|
|
|
'构',
|
|
|
'改',
|
|
|
'革',
|
|
|
'、',
|
|
|
'优化',
|
|
|
'股',
|
|
|
'东',
|
|
|
'结构',
|
|
|
'的',
|
|
|
'积',
|
|
|
'极',
|
|
|
'取',
|
|
|
'向',
|
|
|
'不变',
|
|
|
'。',
|
|
|
'银',
|
|
|
'保',
|
|
|
'监',
|
|
|
'会',
|
|
|
'将',
|
|
|
'继',
|
|
|
'续',
|
|
|
'畅',
|
|
|
'通',
|
|
|
'社会',
|
|
|
'资',
|
|
|
'本',
|
|
|
'投',
|
|
|
'资',
|
|
|
'入',
|
|
|
'股',
|
|
|
'银行',
|
|
|
'保',
|
|
|
'险',
|
|
|
'机',
|
|
|
'构',
|
|
|
'的',
|
|
|
'渠道',
|
|
|
',',
|
|
|
'优化',
|
|
|
'股',
|
|
|
'东',
|
|
|
'结构',
|
|
|
'、',
|
|
|
'充',
|
|
|
'实',
|
|
|
'机',
|
|
|
'构',
|
|
|
'资',
|
|
|
'本',
|
|
|
',',
|
|
|
'重点',
|
|
|
'引',
|
|
|
'入',
|
|
|
'注重',
|
|
|
'机',
|
|
|
'构',
|
|
|
'长远',
|
|
|
'发展',
|
|
|
'、',
|
|
|
'资',
|
|
|
'本',
|
|
|
'实',
|
|
|
'力',
|
|
|
'雄',
|
|
|
'厚',
|
|
|
'、',
|
|
|
'管',
|
|
|
'理',
|
|
|
'经',
|
|
|
'验',
|
|
|
'丰',
|
|
|
'富',
|
|
|
'的',
|
|
|
'战',
|
|
|
'略',
|
|
|
'性',
|
|
|
'股',
|
|
|
'东',
|
|
|
'。',
|
|
|
'二',
|
|
|
'是',
|
|
|
'坚',
|
|
|
'持',
|
|
|
'严',
|
|
|
'惩',
|
|
|
'股',
|
|
|
'东',
|
|
|
'违',
|
|
|
'法',
|
|
|
'违',
|
|
|
'规',
|
|
|
'行为',
|
|
|
'、',
|
|
|
'规',
|
|
|
'范',
|
|
|
'公',
|
|
|
'司',
|
|
|
'治',
|
|
|
'理',
|
|
|
'的',
|
|
|
'高压',
|
|
|
'态',
|
|
|
'势',
|
|
|
'不变',
|
|
|
'。',
|
|
|
'银',
|
|
|
'保',
|
|
|
'监',
|
|
|
'会',
|
|
|
'将',
|
|
|
'继',
|
|
|
'续',
|
|
|
'深',
|
|
|
'入',
|
|
|
'排',
|
|
|
'查',
|
|
|
'整',
|
|
|
'治',
|
|
|
'违',
|
|
|
'法',
|
|
|
'违',
|
|
|
'规',
|
|
|
'股',
|
|
|
'东',
|
|
|
'股',
|
|
|
'权',
|
|
|
',',
|
|
|
'依',
|
|
|
'法',
|
|
|
'清',
|
|
|
'理',
|
|
|
'规',
|
|
|
'范',
|
|
|
'股',
|
|
|
'权',
|
|
|
'关系',
|
|
|
',',
|
|
|
'对',
|
|
|
'股',
|
|
|
'东',
|
|
|
'严重',
|
|
|
'违',
|
|
|
'法',
|
|
|
'违',
|
|
|
'规',
|
|
|
'行为',
|
|
|
',',
|
|
|
'将',
|
|
|
'坚',
|
|
|
'决',
|
|
|
'予以',
|
|
|
'惩',
|
|
|
'戒',
|
|
|
',',
|
|
|
'发现',
|
|
|
'一起',
|
|
|
'、',
|
|
|
'查处',
|
|
|
'一起',
|
|
|
'。']
|
|
|
# yapf: enable
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
import pytest
|
|
|
|
|
|
pytest.cmdline.main()
|