使用 NLTK RegexpTokenizer 去除方括号之间的文本

Use NLTK RegexpTokenizer to remove text between square brackets

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

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

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

但是,此代码只会产生 [] 的输出。我需要更改什么才能覆盖 [] 及其内容?

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

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

参见regex demo

图案详情

  • (?: - non-capturing 组的开始:
    • \[[^][]*] - [,然后 [] 以外的零个或多个字符,然后是 ]
  • | - 或者
    • \s - 一个空格
  • )+ - 组中模式序列的一次或多次重复。