将字符串拆分为具有多个单词边界定界符的单词

北城以北 提交于 2020-01-06 23:34:31

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我认为我想做的是一项相当普通的任务,但是我在网络上找不到任何参考。 我的文字带有标点符号,我想要一个单词列表。

"Hey, you - what are you doing here!?"

应该

['hey', 'you', 'what', 'are', 'you', 'doing', 'here']

但是Python的str.split()仅适用于一个参数,因此在用空格分割后,所有单词都带有标点符号。 有任何想法吗?


#1楼

我正在重新熟悉Python,并需要同样的东西。 findall解决方案可能更好,但是我想到了:

tokens = [x.strip() for x in data.split(',')]

#2楼

正则表达式合理的情况:

import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r"[\w']+", DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']

#3楼

re.split()

re.split(pattern,string [,maxsplit = 0])

通过模式的出现来分割字符串。 如果在模式中使用了捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。 如果maxsplit不为零,则最多会发生maxsplit分割,并将字符串的其余部分作为列表的最后一个元素返回。 (不兼容说明:在原始的Python 1.5发行版中,maxsplit被忽略。此问题已在以后的发行版中修复。)

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']

#4楼

尝试这个:

import re

phrase = "Hey, you - what are you doing here!?"
matches = re.findall('\w+', phrase)
print matches

这将打印['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']


#5楼

实现此目的的另一种方法是使用自然语言工具包( nltk )。

import nltk
data= "Hey, you - what are you doing here!?"
word_tokens = nltk.tokenize.regexp_tokenize(data, r'\w+')
print word_tokens

打印: ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']

这种方法的最大缺点是您需要安装nltk软件包

好处是,一旦获得令牌,您就可以使用其余的nltk软件包做很多有趣的事情

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!