diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 52c0e94b..00000000 --- a/.appveyor.yml +++ /dev/null @@ -1,45 +0,0 @@ -version: "{branch}-{build}" -image: Visual Studio 2017 -build: off -cache: - - '%userprofile%\AppData\Local\pip' -environment: - matrix: - - PYTHON: 'C:\\Python27' - TOXENV: "py27" - - PYTHON: 'C:\\Python27-x64' - TOXENV: "py27" - # - PYTHON: 'C:\\Python34' - # TOXENV: "py34" - # - PYTHON: 'C:\\Python34-x64' - # TOXENV: "py34" - - PYTHON: 'C:\\Python35' - TOXENV: "py35" - - PYTHON: 'C:\\Python35-x64' - TOXENV: "py35" - - PYTHON: 'C:\\Python36' - TOXENV: "py36" - - PYTHON: 'C:\\Python36-x64' - TOXENV: "py36" - - PYTHON: 'C:\\Python37' - TOXENV: "py37" - - PYTHON: 'C:\\Python37-x64' - TOXENV: "py37" - - PYTHON: 'C:\\Python38' - TOXENV: "py38" - - PYTHON: 'C:\\Python38-x64' - TOXENV: "py38" - -install: - - '%PYTHON%\python -V' - - '%PYTHON%\python -m pip install tox' - -test_script: - - '%PYTHON%\Scripts\tox' - -pull_requests: - do_not_increment_build_number: true - -on_failure: - - ps: dir 'env:' - - ps: get-content .tox\*\log\* diff --git a/.circleci/config.yml b/.circleci/config.yml index 8b7b6955..5dfe74d1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -18,14 +18,17 @@ jobs: - checkout # Download and cache dependencies - - restore_cache: - keys: - - v1-dependencies-{{ .Environment.TOX_ENV }}-{{ checksum "requirements_dev.txt" }} +# - restore_cache: +# keys: +# - v1-dependencies-{{ .Environment.TOX_ENV }}-{{ checksum "requirements_dev.txt" }} - run: name: install dependencies command: | - pip install -U pip virtualenv --user + # pip install -U pip virtualenv --user + if ! which virtualenv; then + pip install 'virtualenv<=20.0.21' --user + fi export PATH="~/.local/bin:$PATH" virtualenv venv @@ -41,11 +44,11 @@ jobs: if [[ $(python -c "import sys; print(sys.stdin.encoding)" |grep None) ]]; then export PYTHONIOENCODING=utf-8 fi - - - save_cache: - paths: - - ./venv - key: v1-dependencies-{{ .Environment.TOX_ENV }}-{{ checksum "requirements_dev.txt" }} +# +# - save_cache: +# paths: +# - ./venv +# key: v1-dependencies-{{ .Environment.TOX_ENV }}-{{ checksum "requirements_dev.txt" }} - run: name: run tests diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..fa78fde8 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,29 @@ +# This workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: CI + +on: [push, pull_request] + +jobs: + build: + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest] + # python-version: [2.7, 3.5, 3.6, 3.7, 3.8] + python-version: [3.8] + tox-env: [py27, py35, py36, py37, py38] + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install tox + - name: Test with tox + run: tox -e ${{ matrix.tox-env}} diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6a82159d..276f0f38 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,12 @@ Changelog --------- +`0.38.1`_ (2020-07-05) +++++++++++++++++++++++++ + +* **[Improved]** 优化内置分词,处理前缀匹配导致无法正确识别尾部词语的问题。 Fixed `#205`_ +* **[Improved]** 使用 `phrase-pinyin-data`_ v0.10.3 的词语拼音数据。 + `0.38.0`_ (2020-06-07) ++++++++++++++++++++++++ @@ -181,14 +187,14 @@ Changelog `0.26.0`_ (2017-10-12) +++++++++++++++++++++++ -* **[Changed]** 不再自动调用 jieba 分词模块,改为自动调用内置的最大匹配分词模块来分词。 +* **[Changed]** 不再自动调用 jieba 分词模块,改为自动调用内置的正向最大匹配分词模块来分词。 (via `#102`_) `0.25.0`_ (2017-10-01) +++++++++++++++++++++++ -* **[New]** 内置一个最大匹配分词模块,使用内置的词语拼音库来训练这个分词模块, +* **[New]** 内置一个正向最大匹配分词模块,使用内置的词语拼音库来训练这个分词模块, 解决自定义词语库有时可能不生效的问题(因为这个词语在 jieba 等分词模块中不是可用词)。(via `#81`_) @@ -207,7 +213,7 @@ Changelog >>> from pypinyin.contrib.mmseg import seg, retrain >>> retrain(seg) # 没有使用 load_phrases_dict 时可以不调用这个函数 - >>> pinyin(seg.cut('了局啊')) # 使用内置的最大匹配分词 + >>> pinyin(seg.cut('了局啊')) # 使用内置的正向最大匹配分词 [['liǎo'], ['jú'], ['a']] >>> @@ -760,6 +766,7 @@ __ https://github.com/mozillazg/python-pinyin/issues/8 .. _#170: https://github.com/mozillazg/python-pinyin/issues/170 .. _#174: https://github.com/mozillazg/python-pinyin/issues/174 .. _#139: https://github.com/mozillazg/python-pinyin/issues/139 +.. _#205: https://github.com/mozillazg/python-pinyin/issues/205 .. _#164: https://github.com/mozillazg/python-pinyin/pull/164 .. _#176: https://github.com/mozillazg/python-pinyin/pull/176 .. _@hanabi1224: https://github.com/hanabi1224 @@ -840,3 +847,4 @@ __ https://github.com/mozillazg/python-pinyin/issues/8 .. _0.36.0: https://github.com/mozillazg/python-pinyin/compare/v0.35.4...v0.36.0 .. _0.37.0: https://github.com/mozillazg/python-pinyin/compare/v0.36.0...v0.37.0 .. _0.38.0: https://github.com/mozillazg/python-pinyin/compare/v0.37.0...v0.38.0 +.. _0.38.1: https://github.com/mozillazg/python-pinyin/compare/v0.38.0...v0.38.1 diff --git a/README.rst b/README.rst index 5b765625..e26e480f 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,7 @@ 汉字拼音转换工具(Python 版) ============================= -|Build| |appveyor| |Coverage| |Pypi version| |DOI| +|Build| |GitHubAction| |Coverage| |Pypi version| |DOI| 将汉字转为拼音。可以用于汉字注音、排序、检索(`Russian translation`_) 。 @@ -177,8 +177,8 @@ __ https://github.com/mozillazg/rust-pinyin .. |Build| image:: https://img.shields.io/circleci/project/github/mozillazg/python-pinyin/master.svg :target: https://circleci.com/gh/mozillazg/python-pinyin -.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/ni8gdyextfa85yqo/branch/master?svg=true - :target: https://ci.appveyor.com/project/mozillazg/python-pinyin +.. |GitHubAction| image:: https://github.com/mozillazg/python-pinyin/workflows/CI/badge.svg + :target: https://github.com/mozillazg/python-pinyin/actions .. |Coverage| image:: https://img.shields.io/codecov/c/github/mozillazg/python-pinyin/master.svg :target: https://codecov.io/gh/mozillazg/python-pinyin .. |PyPI version| image:: https://img.shields.io/pypi/v/pypinyin.svg diff --git a/README_en.rst b/README_en.rst index 535da50c..ed0e7257 100644 --- a/README_en.rst +++ b/README_en.rst @@ -1,7 +1,7 @@ A tool for converting Chinese characters to pinyin (Python version) -============================= +===================================================================== -|Build| |appveyor| |Coverage| |Pypi version| |DOI| +|Build| |GitHubAction| |Coverage| |Pypi version| |DOI| Takes Chinese characters and converts them to pinyin, zhuyin, and Cyrillic. @@ -174,8 +174,8 @@ __ https://github.com/mozillazg/rust-pinyin .. |Build| image:: https://img.shields.io/circleci/project/github/mozillazg/python-pinyin/master.svg :target: https://circleci.com/gh/mozillazg/python-pinyin -.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/ni8gdyextfa85yqo/branch/master?svg=true - :target: https://ci.appveyor.com/project/mozillazg/python-pinyin +.. |GitHubAction| image:: https://github.com/mozillazg/python-pinyin/workflows/CI/badge.svg + :target: https://github.com/mozillazg/python-pinyin/actions .. |Coverage| image:: https://img.shields.io/codecov/c/github/mozillazg/python-pinyin/master.svg :target: https://codecov.io/gh/mozillazg/python-pinyin .. |PyPI version| image:: https://img.shields.io/pypi/v/pypinyin.svg diff --git a/phrase-pinyin-data b/phrase-pinyin-data index 7f9bd93d..06cdaaf5 160000 --- a/phrase-pinyin-data +++ b/phrase-pinyin-data @@ -1 +1 @@ -Subproject commit 7f9bd93d84cd46d73d2efc5e8c42062e8f475b56 +Subproject commit 06cdaaf520393c41bbeb6085a953fed09665c2aa diff --git a/pypinyin/phrases_dict.py b/pypinyin/phrases_dict.py index fa16b066..671c0f0c 100644 --- a/pypinyin/phrases_dict.py +++ b/pypinyin/phrases_dict.py @@ -37835,6 +37835,7 @@ '还淳反素': [['huán'], ['chún'], ['fǎn'], ['sù']], '还淳返朴': [['huán'], ['chún'], ['fǎn'], ['pǔ']], '还清': [['huán'], ['qīng']], + '还珠': [['huán'], ['zhū']], '还珠买椟': [['huán'], ['zhū'], ['mǎi'], ['dú']], '还珠合浦': [['huán'], ['zhū'], ['hé'], ['pǔ']], '还珠返璧': [['huán'], ['zhū'], ['fǎn'], ['bì']], diff --git a/pypinyin/seg/mmseg.py b/pypinyin/seg/mmseg.py index 0fcf5ba4..f35eb1c3 100644 --- a/pypinyin/seg/mmseg.py +++ b/pypinyin/seg/mmseg.py @@ -4,15 +4,16 @@ class Seg(object): - """最大正向匹配分词 + """正向最大匹配分词 :type prefix_set: PrefixSet + :param no_non_phrases: 是否严格按照词语分词,不允许把非词语的词当做词语进行分词 + :type no_non_phrases: bool """ - def __init__(self, prefix_set): + def __init__(self, prefix_set, no_non_phrases=False): self._prefix_set = prefix_set - # 是否严格按照词语分词,不允许把非词语的词当做词语进行分词 - self._no_non_phrases = False + self._no_non_phrases = no_non_phrases def cut(self, text): """分词 @@ -38,18 +39,29 @@ def cut(self, text): yield matched matched = '' remain = remain[index:] - else: # 前面为空 + else: # 前面为空或不是真正的词语 # 严格按照词语分词的情况下,不是词语的词拆分为单个汉字 + # 先返回第一个字,后面的重新参与分词, + # 处理前缀匹配导致无法识别输入尾部的词语, + # 支持简单的逆向匹配分词: + # 已有词语:金融寡头 行业 + # 输入:金融行业 + # 输出:金 融 行业 if self._no_non_phrases: - for x in word: - yield x + yield word[0] + remain = remain[index + 2 - len(word):] else: yield word - remain = remain[index + 1:] + remain = remain[index + 1:] # 有结果了,剩余的重新开始匹配 + matched = '' break - else: # 整个文本就是一个词语 - yield remain + else: # 整个文本就是一个词语,或者不包含任何词语 + if self._no_non_phrases and remain not in PHRASES_DICT: + for x in remain: + yield x + else: + yield remain break def train(self, words): @@ -99,8 +111,7 @@ def __contains__(self, key): #: ['你好', ',', '我是', '中国人', ',', '我', '爱', #: '我的', '祖国'] #: >>> -seg = Seg(p_set) -seg._no_non_phrases = True +seg = Seg(p_set, no_non_phrases=True) def retrain(seg_instance): diff --git a/pypinyin/seg/mmseg.pyi b/pypinyin/seg/mmseg.pyi index d2c69f7c..8bcb9709 100644 --- a/pypinyin/seg/mmseg.pyi +++ b/pypinyin/seg/mmseg.pyi @@ -7,8 +7,9 @@ class Seg(object): """最大正向匹配分词 :type prefix_set: PrefixSet + :type no_non_phrases: bool """ - def __init__(self, prefix_set: PrefixSet) -> None: + def __init__(self, prefix_set: PrefixSet, no_non_phrases: bool) -> None: self._no_non_phrases = ... # type: bool self._prefix_set = ... # type: PrefixSet ... diff --git a/tests/contrib/test_mmseg.py b/tests/contrib/test_mmseg.py index f66bc09f..185831b8 100644 --- a/tests/contrib/test_mmseg.py +++ b/tests/contrib/test_mmseg.py @@ -6,7 +6,6 @@ from pypinyin import pinyin, load_phrases_dict from pypinyin.contrib import mmseg - seg_test = mmseg.Seg(mmseg.PrefixSet()) seg_test._prefix_set.train([ 'a', @@ -69,7 +68,7 @@ '北京', '天安门', ], - ], + ], ] ) def test_mmseg(input, expect): @@ -115,14 +114,680 @@ def test_retrain(): assert list(seg.cut('男孩儿')) == ['男孩儿'] -def test_no_non_phrases(): +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('行业以其昏昏')) == [ + '行业', '以', '其', '昏', '昏'] + + # 中间是词语 + assert list(seg.cut('使人昭昭行业以其昏昏')) == [ + '使', '人', '昭', '昭', '行业', '以', '其', '昏', '昏'] + + +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( + '该负责人表示,银行保险机构具有外部性强、财务杠杆率高、' + '信息不对称严重等特征,不同于一般工商企业,对其股东股权必须从严管理。' + '总体上,银保监会将坚持“两个不变”。一是坚持鼓励社会资本参与银行保险机构改革、' + '优化股东结构的积极取向不变。银保监会将继续畅通社会资本投资入股银行保险机构的渠道,' + '优化股东结构、充实机构资本,重点引入注重机构长远发展、资本实力雄厚、管理经验' + '丰富的战略性股东。二是坚持严惩股东违法违规行为、规范公司治理的高压态势不变。' + '银保监会将继续深入排查整治违法违规股东股权,依法清理规范股权关系,' + '对股东严重违法违规行为,将坚决予以惩戒,发现一起、查处一起。')) == [ + '该', + '负', + '责', + '人', + '表', + '示', + ',', + '银行', + '保', + '险', + '机', + '构', + '具有', + '外', + '部', + '性', + '强', + '、', + '财', + '务', + '杠杆', + '率', + '高', + '、', + '信息', + '不对', + '称', + '严重', + '等', + '特', + '征', + ',', + '不同', + '于', + '一般', + '工', + '商', + '企', + '业', + ',', + '对', + '其', + '股', + '东', + '股', + '权', + '必', + '须', + '从', + '严', + '管', + '理', + '。', + '总体', + '上', + ',', + '银', + '保', + '监', + '会', + '将', + '坚', + '持', + '“', + '两个', + '不变', + '”', + '。', + '一', + '是', + '坚', + '持', + '鼓', + '励', + '社会', + '资', + '本', + '参与', + '银行', + '保', + '险', + '机', + '构', + '改', + '革', + '、', + '优化', + '股', + '东', + '结构', + '的', + '积', + '极', + '取', + '向', + '不变', + '。', + '银', + '保', + '监', + '会', + '将', + '继', + '续', + '畅', + '通', + '社会', + '资', + '本', + '投', + '资', + '入', + '股', + '银行', + '保', + '险', + '机', + '构', + '的', + '渠道', + ',', + '优化', + '股', + '东', + '结构', + '、', + '充', + '实', + '机', + '构', + '资', + '本', + ',', + '重点', + '引', + '入', + '注重', + '机', + '构', + '长远', + '发展', + '、', + '资', + '本', + '实', + '力', + '雄', + '厚', + '、', + '管', + '理', + '经', + '验', + '丰', + '富', + '的', + '战', + '略', + '性', + '股', + '东', + '。', + '二', + '是', + '坚', + '持', + '严', + '惩', + '股', + '东', + '违', + '法', + '违', + '规', + '行为', + '、', + '规', + '范', + '公', + '司', + '治', + '理', + '的', + '高压', + '态', + '势', + '不变', + '。', + '银', + '保', + '监', + '会', + '将', + '继', + '续', + '深', + '入', + '排', + '查', + '整', + '治', + '违', + '法', + '违', + '规', + '股', + '东', + '股', + '权', + ',', + '依', + '法', + '清', + '理', + '规', + '范', + '股', + '权', + '关系', + ',', + '对', + '股', + '东', + '严重', + '违', + '法', + '违', + '规', + '行为', + ',', + '将', + '坚', + '决', + '予以', + '惩', + '戒', + ',', + '发现', + '一起', + '、', + '查处', + '一起', + '。'] if __name__ == '__main__': import pytest + pytest.cmdline.main() diff --git a/tests/test_others.py b/tests/test_others.py index a62cad1a..200d43cd 100644 --- a/tests/test_others.py +++ b/tests/test_others.py @@ -2,13 +2,13 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from pypinyin import * # noqa +from pypinyin import pinyin, Style, lazy_pinyin, slug from pypinyin.seg.simpleseg import simple_seg def test_import_all(): pinyin('啦啦啦') # noqa - pinyin('啦啦啦', TONE2) # noqa + pinyin('啦啦啦', Style.TONE2) # noqa lazy_pinyin('啦啦啦') # noqa slug('啦啦啦') # noqa @@ -31,6 +31,13 @@ def test_simple_seg(): assert simple_seg('a啊 -- 你好那 ') == ['a', '啊', ' -- ', '你好那', ' '] +def test_issue_205(): + assert pinyin('金融行业', Style.FIRST_LETTER)[2] == ['h'] + assert pinyin('军工行业', Style.FIRST_LETTER)[2] == ['h'] + assert pinyin('浦发银行', Style.FIRST_LETTER)[3] == ['h'] + assert pinyin('交通银行', Style.FIRST_LETTER)[3] == ['h'] + + if __name__ == '__main__': import pytest pytest.cmdline.main()