blog10 提取候选词的输入文本

2021SC@SDUSC

在上一博客中,参数text_obj代表了我们想要提取候选词的输入文档,这些定义在input_representation.py文件中的class InputTextObj中,接下来我们就详细分析文件input_representation.py。
参数说明
pos_tagged:列表的列表,这里是sentence的列表,这里的每一个sentence都是一个元组列表(word,TAG),其中word代表单词,TAG代表词性。
stem:如果我们项在文本中使用stemming。

类InputTextObj

一、def _ init _(self, pos_tagged, lang, stem=False, min_word_len=3初始化函数:

初始化:

self.min_word_len = min_word_len
        self.considered_tags = {'NN', 'NNS', 'NNP', 'NNPS', 'JJ'}
        self.pos_tagged = []
        self.filtered_pos_tagged = []
        self.isStemmed = stem
        self.lang = lang

根据stem初始化pos_tagged:

        if stem:
            stemmer = PorterStemmer()
            self.pos_tagged = [[(stemmer.stem(t[0]), t[1]) for t in sent] for sent in pos_tagged]
        else:
            self.pos_tagged = [[(t[0].lower(), t[1]) for t in sent] for sent in pos_tagged]

将符合条件的pos_tagged临时存放在temp数组中,再赋值给pos_tagged:

temp = []

        for sent in self.pos_tagged:
            s = []
            for elem in sent:
                if len(elem[0]) < min_word_len:
                    s.append((elem[0], 'LESS'))
                else:
                    s.append(elem)
                    
            temp.append(s)

        self.pos_tagged = temp

转换一些具体的词性标签,比如NC、NE转换为NN,或者ADJA转换为JJ,具体使用了convert函数:

        if lang in ['fr', 'de']:
            self.pos_tagged = [[(tagged_token[0], convert(tagged_token[1])) for tagged_token in sentence] for sentence
                               in
                               self.pos_tagged]
                               
        self.filtered_pos_tagged = [[(t[0].lower(), t[1]) for t in sent if self.is_candidate(t)] for sent in
                                    self.pos_tagged]

二、def is_candidate(self, tagged_token)函数
输入:元组(word,TAG)。
输出:一个有效的候选词。

    def is_candidate(self, tagged_token):
       
        return tagged_token[1] in self.considered_tags

三、def extract_candidates(self)函数:
返回所有的候选词:

def extract_candidates(self):

	return {tagged_token[0].lower()
                	for sentence in self.pos_tagged
                	for tagged_token in sentence
                	if self.is_candidate(tagged_token) and len(tagged_token[0]) >= self.min_word_len
                	}

四、def convert(fr_or_de_tag)函数:
如果tag为’NN’、‘NNE’、‘NE’、‘N’、‘NPP’、‘NC’、‘NOUN’的其中一种,则转换为’NN’;
如果tag为’ADJA’、‘ADJ’的其中一种,则转换为’JJ’;
否则将原参数返回。

def convert(fr_or_de_tag):

    if fr_or_de_tag in {'NN', 'NNE', 'NE', 'N', 'NPP', 'NC', 'NOUN'}:
        return 'NN'
        
    elif fr_or_de_tag in {'ADJA', 'ADJ'}:
        return 'JJ'
        
    else:
        return fr_or_de_tag
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值