使用NLTK+StanfordNLP进行文本特征提取

文章为自己的实践记录及总结,多有疏忽,恐有错误......

文本特征提取是基于特征向量的自然语言处理方法的基本技术,常用的提取自文本的特征主要包括词汇特征、位置特征、句法特征、语义特征。其中,词汇特征包括词性、上下文词汇、命名实体等;位置特征如命名实体之间的间隔距离;句法特征提取主要包括句法分析及依存句法分析。常用的特征获取工具有StanfordNLPLTP(哈工大社会计算与信息检索研究中心研发的语言技术平台),支持中英文在内的多种语言,目前nltk中提供了Standford NLP的几个功能:分词,词性标注,命名实体识别,句法分析,依存句法分析等,本文主要记录其安装使用方法。

词性标注 标注解释

# 分词,text_raw为单句
text = nltk.word_tokenize(text_raw)
# 去掉标点符号
english_punctuations = [',', '.', ':', ';', '?', '(', ')', '[', ']', '&', '!', '*', '@', '#', '$', '%']
text = [w for w in text if w not in english_punctuations]
# 去或不去停用词
# filtered = [w for w in text if w not in stopwords.words('english')]
rfiltered = nltk.pos_tag(text)

命名实体识别

参考 tips:单词的大小写直接影响识别结果

nltk.ne_chunk(pos(texts)[13],binary=False)
# 输入参数tagged_tokens是词性标注后的列表形式 ,默认binary:false,输出形式为<class 'nltk.tree.Tree'>
# 用列表存储
ner_list = []
for text in pos(texts):
        tree_list = []
        for tree in nltk.ne_chunk(text, binary=False).subtrees():
            # 过滤根树
            if tree.label() == "S":
                continue
            tree_list.append(tree)
        ner_list.append(tree_list)

依存句法分析依存树

nltk没有提供好的parser,推荐使用standfordparser

在nltk中使用Standford NLP工具包:https://www.jianshu.com/p/4b3c7e7578e6

# from nltk.parse.stanford import StanfordParser
# from nltk.parse.stanford import StanfordDependencyParser
from nltk.parse.corenlp import CoreNLPParser
parser = CoreNLPParser(r'')
parse_result = parser.parse(nltk.word_tokenize(text))

parser = StanfordDependencyParser(model_path=u'')
res = parser.parse(text)

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要用Python进行英文短文本主谓宾的提取工作,可以使用自然语言处理(Natural Language Processing, NLP)的相关库和技术。下面是一个使用nltkStanfordNLP的代码示例: 首先,确保你已经安装了nltkStanfordNLP库,并下载了相应的语料库: ``` import nltk from nltk.parse.corenlp import CoreNLPServer from nltk.tree import Tree nltk.download('punkt') nltk.download('corenlp') nltk.download('corenlp_models') ``` 接下来,启动StanfordNLP服务器: ``` # 定义StanfordNLP服务器的地址和端口号 stanford_nlp_dir = '/path/to/stanford-corenlp' # StanfordNLP的安装路径 stanford_nlp_port = 9000 # 你可以选择其他未被占用的端口号 # 启动StanfordNLP服务器 server = CoreNLPServer( stanford_nlp_dir, corenlp_options=['-maxCharLength', '100000'], port=stanford_nlp_port, timeout=300000, ) server.start() ``` 然后,定义一个函数来提取主谓宾: ``` def extract_subject_verb_object(text): # 使用StanfordNLP标注词性和句法分析 with CoreNLPServer( 'http://localhost:{}'.format(stanford_nlp_port), timeout=300000, ): # 获取句法分析结果 annotated_text = nltk.parse.corenlp.raw_parse(text) parsed_tree = next(annotated_text) # 提取主谓宾 subject_verb_object = [] for subtree in parsed_tree.subtrees(): if subtree.label() == 'S': subject = ' '.join([token[0] for token in subtree.leaves() if token[1].startswith('NN')]) verb = ' '.join([token[0] for token in subtree.leaves() if token[1].startswith('VB')]) obj = ' '.join([token[0] for token in subtree.leaves() if token[1].startswith('NN') or token[1].startswith('VB')]) if subject and verb and obj: subject_verb_object.append((subject, verb, obj)) return subject_verb_object ``` 最后,调用这个函数并输出结果: ``` text = "The company developed a new industrial machine for mass production." subject_verb_object = extract_subject_verb_object(text) for s, v, o in subject_verb_object: print("主语:", s) print("谓语:", v) print("宾语:", o) ``` 这段代码将会输出以下结果: ``` 主语: company 谓语: developed 宾语: machine production ``` 这就是使用Python进行英文短文本主谓宾提取的代码示例。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值