o
    Ti                     @   s\   d Z ddlmZ G dd deZG dd deZe Zee  eeddZ	d	d
 Z
dS )u   最大正向匹配分词    )PHRASES_DICTc                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )Segu   正向最大匹配分词

    :type prefix_set: PrefixSet
    :param no_non_phrases: 是否严格按照词语分词，不允许把非词语的词当做词语进行分词
    :type no_non_phrases: bool
    Fc                 C   s   || _ || _d S N)_prefix_set_no_non_phrases)self
prefix_setno_non_phrases r
   F/home/ubuntu/.local/lib/python3.10/site-packages/pypinyin/seg/mmseg.py__init__   s   
zSeg.__init__c                 c   s    |}|rrd}t t|D ]J}|d|d  }|| jv r|}q|r4| jr(|tv r4|V  d}||d }n | jrI|d V  ||d t| d }n|V  ||d d }d} n| jri|tvri|D ]}|V  qadS |V  dS |sdS dS )uU   分词

        :param text: 待分词的文本
        :yield: 单个词语
         N   r      )rangelenr   r   r   )r   textremainmatchedindexwordxr
   r
   r   cut   s:   
	
zSeg.cutc                 C   s   | j | dS )u<   训练分词器

        :param words: 词语列表
        N)r   train)r   wordsr
   r
   r   r   C   s   z	Seg.trainN)F)__name__
__module____qualname____doc__r   r   r   r
   r
   r
   r   r      s
    
1r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	PrefixSetc                 C   s   t  | _d S r   )set_set)r   r
   r
   r   r   L   s   zPrefixSet.__init__c                 C   s8   |D ]}t t|D ]}| j|d|d   q
qdS )uw   更新 prefix set

        :param word_s: 词语库列表
        :type word_s: iterable
        :return: None
        Nr   )r   r   r!   add)r   word_sr   r   r
   r
   r   r   O   s
   zPrefixSet.trainc                 C   s
   || j v S r   )r!   )r   keyr
   r
   r   __contains__[   s   
zPrefixSet.__contains__N)r   r   r   r   r   r%   r
   r
   r
   r   r   K   s    r   T)r	   c                 C   s   |  t  dS )u   重新使用内置词典训练 seg_instance。

    比如在增加自定义词语信息后需要调用这个模块重新训练分词器

    :type seg_instance: Seg
    N)r   r   keys)seg_instancer
   r
   r   retrainu   s   r(   N)r   pypinyin.constantsr   objectr   r   p_setr   r&   segr(   r
   r
   r
   r   <module>   s   E