我想在NLTK RegexpParser的帮助下从文本中提取特定的短语。有没有办法在pos_tags中组合精确的单词?
例如,这是我的经文:
import nltk
text = "Samle Text and sample Text and text With University of California and Institute for Technology with SAPLE TEXT"
tokens = nltk.word_tokenize(text)
tagged_text = nltk.pos_tag(tokens)
regex = "ENTITY:{<University|Institute><for|of><NNP|NN>}"
# searching by regex that is defined
entity_search = nltk.RegexpParser(regex)
entity_result = entity_search.parse(tagged_text)
entity_result = list(entity_result)
print(entity_result)
Ofc,我有很多不同的单词组合,我想在我的"实体"正则表达式中使用,而且我有更长的文本。有什么方法可以让它工作吗?顺便说一句,我想让它与RegexpParser一起工作,我不想使用常规正则表达式。
1条答案
按热度按时间dxxyhpgq1#
这里有一个解决方案,它不需要您指定确切的单词,但仍然提取感兴趣的实体。(
{<N.*><IN><N.*>}
)匹配任何名词相关的标签<N.*>
,后面跟着介词或从属连词标签<IN>
,后面跟着另一个与名词相关的标签<N.*>
。这是字符串的一般PoS标签模式,如“____大学”或“____研究所"。您可以将<N.*>
更改为<NNP>
,使其更加严格,仅匹配专有名词。有关PoS标记的详细信息,请参阅this tutorial。溶液#1
输出
如果你真的需要捕捉精确单词的能力,你可以通过为你需要的每个单词定义自定义标签来实现。一个不需要训练你自己的自定义标签的简单解决方案如下:
溶液#2
输出