Пример #1
0
    def _prepare(self):
        # 词性预处理
        # 词性参考 https://github.com/lancopku/pkuseg-python/blob/master/tags.txt
        # jio.util.pkuseg_postag_loader()
        self.pos_name = set(pkuseg_postag_loader().keys())
        self.pos_exception = set(['u', 'p', 'c', 'y', 'e', 'o', 'w'])
        self.loose_pos_name = self.pos_name - self.pos_exception
        self.strict_pos_name = [
            'a', 'n', 'j', 'nr', 'ns', 'nt', 'nx', 'nz', 'ad', 'an', 'vn',
            'vd', 'vx'
        ]

        # 去除冗余短语的规则
        self.redundent_strict_pattern = re.compile(
            '[\*\|`\;:丨-\<\>]')  # 有一个字符即抛弃
        self.redundent_loose_pattern = re.compile(
            '[/\d\.\-:=a-z+,%]+')  # 全部是该字符即抛弃
        self.extra_date_ptn = re.compile('\d{1,2}[月|日]')

        # 加载 idf,计算其 oov 均值
        self.idf_dict = idf_loader()
        self.median_idf = sorted(self.idf_dict.values())[len(self.idf_dict) //
                                                         2]
        self.seg = pkuseg.pkuseg(postag=True)  # 北大分词器

        # 短语长度权重字典,调整绝大多数的短语要位于 2~6 个词之间
        # 根据人工抽取的关键短语结果,短语词长有一个泊松分布,而根据 idf 和 lda 概率的结果,也有一个
        # 分布,两者之间存在偏差,因此,直接对短语长度分布采用权重进行调节,使抽取分布逼近人工的分布。
        self.phrases_length_control_dict = {
            1: 1,
            2: 5.6,
            3: 1.1,
            4: 2.0,
            5: 0.7,
            6: 0.9,
            7: 0.48,
            8: 0.43,
            9: 0.24,
            10: 0.15,
            11: 0.07,
            12: 0.05
        }
        self.phrases_length_control_none = 0.01  # 在大于 7 时选取

        # 短语词性组合权重字典
        with open(os.path.join(DIR_PATH, 'pos_combine_weights.json'),
                  'r',
                  encoding='utf8') as f:
            self.pos_combine_weights_dict = json.load(f)

        # 读取停用词文件
        self.stop_words = stopwords_loader()

        # 加载 lda 模型参数
        self._lda_prob_matrix()
Пример #2
0
    def _prepare(self):
        self.pos_name = set(pkuseg_postag_loader().keys())
        self.strict_pos_name = [
            'a', 'n', 'j', 'nr', 'ns', 'nt', 'nx', 'nz', 'ad', 'an', 'vn',
            'vd', 'vx'
        ]
        self.seg = pkuseg.pkuseg(postag=True)  # 北大分词器

        # 加载 idf,计算其 oov 均值
        self.idf_dict = idf_loader()
        self.median_idf = sorted(self.idf_dict.values())[len(self.idf_dict) //
                                                         2]

        # 读取停用词文件
        self.stop_words = stopwords_loader()

        # 加载 lda 模型参数
        self._lda_prob_matrix()