首页 > 解决方案 > 使用 NLTK RegexpTokenizer 删除方括号之间的文本

问题描述

我正在尝试使用 NLTK RegexpTokenizer 从成绩单中删除正方形之间的所有文本:

file = open('speakers.txt', 'r')
read_file = file.read()

tokenizer = nltk.RegexpTokenizer(r'\[\[(?:[^\]|]*\|)?([^\]|]*)\]\]')
new_words = tokenizer.tokenize(read_file)
print(new_words)
[]

但是,此代码仅输出 []。我需要更改什么才能使其覆盖 [] 及其内容?

标签: pythonregexnltktokenize

解决方案


您需要使用(?:\[[^][]*]|\s)+正则表达式并添加gaps=True参数以使用方括号内的任何字符串拆分,其中没有内部、嵌套括号和空格:

tokenizer = nltk.RegexpTokenizer(r'(?:\[[^][]*]|\s)+', gaps=True)

请参阅正则表达式演示

图案细节

  • (?:- 非捕获组的开始:
    • \[[^][]*]- a ,然后是除and之外的[零个或多个字符,然后[]]
  • |- 或者
    • \s- 一个空格
  • )+- 组中模式序列的一个或多个重复。

推荐阅读