将字符串转换为单词列表?

2025-02-20 09:23:00
admin
原创
25
摘要:问题描述:我正在尝试使用 python 将字符串转换为单词列表。我想要采取类似以下的做法:string = 'This is a string, with words!' 然后转换成这样的形式:list = ['This', 'is', 'a', 'string', 'with', 'words'] 注意省略...

问题描述:

我正在尝试使用 python 将字符串转换为单词列表。我想要采取类似以下的做法:

string = 'This is a string, with words!'

然后转换成这样的形式:

list = ['This', 'is', 'a', 'string', 'with', 'words']

注意省略了标点符号和空格。最快的解决方法是什么?


解决方案 1:

鉴于回复较晚,我认为这对其他偶然发现这篇文章的人来说是最简单的方法:

>>> string = 'This is a string, with words!'
>>> string.split()
['This', 'is', 'a', 'string,', 'with', 'words!']

解决方案 2:

尝试一下:

import re

mystr = 'This is a string, with words!'
wordList = re.sub("[^w]", " ",  mystr).split()

工作原理:

来自文档:

re.sub(pattern, repl, string, count=0, flags=0)

返回通过用替换 repl 替换字符串中最左边不重叠的模式而获得的字符串。如果未找到模式,则返回不变的字符串。repl 可以是字符串或函数。

所以在我们的例子中:

模式是任何非字母数字字符。

[\w] 表示任意字母数字字符,相当于字符集 [a-zA-Z0-9_]

a 到 z、A 到 Z、0 到 9 和下划线。

因此我们匹配任何非字母数字字符并将其替换为空格。

然后我们使用 split() 方法,用空格分割字符串并将其转换为列表

所以‘你好世界’

变成‘hello world’

使用 re.sub

然后是 [‘hello’,‘world’]

在 split() 之后

如果有任何疑问,请告诉我。

解决方案 3:

要正确地做到这一点相当复杂。对于您的研究,它被称为单词标记化。如果您想看看其他人做了什么,您应该看看NLTK,而不是从头开始:

>>> import nltk
>>> paragraph = u"Hi, this is my first sentence. And this is my second."
>>> sentences = nltk.sent_tokenize(paragraph)
>>> for sentence in sentences:
...     nltk.word_tokenize(sentence)
[u'Hi', u',', u'this', u'is', u'my', u'first', u'sentence', u'.']
[u'And', u'this', u'is', u'my', u'second', u'.']

解决方案 4:

最简单的方法:

>>> import re
>>> string = 'This is a string, with words!'
>>> re.findall(r'w+', string)
['This', 'is', 'a', 'string', 'with', 'words']

解决方案 5:

string.punctuation为了完整性使用:

import re
import string
x = re.sub('['+string.punctuation+']', '', s).split()

这也处理换行符。

解决方案 6:

嗯,你可以使用

import re
list = re.sub(r'[.!,;?]', ' ', string).split()

请注意,和都是string内置list类型的名称,因此您可能不想将它们用作变量名。

解决方案 7:

受到@mtrw 答案的启发,但进行了改进,仅去除单词边界处的标点符号:

import re
import string

def extract_words(s):
    return [re.sub('^[{0}]+|[{0}]+$'.format(string.punctuation), '', w) for w in s.split()]

>>> str = 'This is a string, with words!'
>>> extract_words(str)
['This', 'is', 'a', 'string', 'with', 'words']

>>> str = '''I'm a custom-built sentence with "tricky" words like https://stackoverflow.com/.'''
>>> extract_words(str)
["I'm", 'a', 'custom-built', 'sentence', 'with', 'tricky', 'words', 'like', 'https://stackoverflow.com']

解决方案 8:

我个人认为这比提供的答案稍微清晰一些

def split_to_words(sentence):
    return list(filter(lambda w: len(w) > 0, re.split('W+', sentence))) #Use sentence.lower(), if needed

解决方案 9:

单词的正则表达式可以为您提供最大的控制权。您需要仔细考虑如何处理带有破折号或撇号的单词,例如“I'm”。

解决方案 10:

list=mystr.split(" ",mystr.count(" "))

解决方案 11:

这样,你就可以消除字母表之外的每个特殊字符:

def wordsToList(strn):
    L = strn.split()
    cleanL = []
    abc = 'abcdefghijklmnopqrstuvwxyz'
    ABC = abc.upper()
    letters = abc + ABC
    for e in L:
        word = ''
        for c in e:
            if c in letters:
                word += c
        if word != '':
            cleanL.append(word)
    return cleanL

s = 'She loves you, yea yea yea! '
L = wordsToList(s)
print(L)  # ['She', 'loves', 'you', 'yea', 'yea', 'yea']

我不确定这是否快速或最佳,甚至是否是正确的编程方式。

解决方案 12:

def split_string(string):
    return string.split()

此函数将返回给定字符串的单词列表。在这种情况下,如果我们按如下方式调用该函数,

string = 'This is a string, with words!'
split_string(string)

该函数的返回输出为

['This', 'is', 'a', 'string,', 'with', 'words!']

解决方案 13:

使用关键词法启动词典理解并填写相关部分。

您可以使用 .split() 方法获取字符串中的单词列表:https://www.w3schools.com/python/ref_string_split.asp

sentence = "What is the Airspeed Velocity of an Unladen Swallow?"
split_word = sentence.split()
words = {word for word in split_word}
print(words)

output - {'What', 'the', 'of', 'an', 'Unladen', 'Airspeed', 'Swallow?', 
'Velocity', 'is'}

解决方案 14:

这是我在不能使用正则表达式的编码挑战中的尝试,

outputList = "".join((c if c.isalnum() or c=="'" else ' ') for c in inputStr ).split(' ')

撇号的作用看起来很有趣。

解决方案 15:

可能不太优雅,但至少你知道发生了什么。

my_str = "Simple sample, test! is, olny".lower()
my_lst =[]
temp=""
len_my_str = len(my_str)
number_letter_in_data=0
list_words_number=0
for number_letter_in_data in range(0, len_my_str, 1):
    if my_str[number_letter_in_data] in [',', '.', '!', '(', ')', ':', ';', '-']:
        pass
    else:
        if my_str[number_letter_in_data] in [' ']:
            #if you want longer than 3 char words
            if len(temp)>3:
                list_words_number +=1
                my_lst.append(temp)
                temp=""
            else:
                pass
        else:
            temp = temp+my_str[number_letter_in_data]
my_lst.append(temp)
print(my_lst)

解决方案 16:

string = '这是一个带有文字的字符串!'

列表 = [string.split() 中的单词]

打印(列表)

['这', '是', '一个', '字符串,', '带有', '单词!']

解决方案 17:

您可以尝试这样做:

tryTrans = string.maketrans(",!", "  ")
str = "This is a string, with words!"
str = str.translate(tryTrans)
listOfWords = str.split()
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1325  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它涵盖了从产品概念产生到产品退市的整个生命周期,通过整合跨部门团队、优化流程等方式,显著提升产品开发的效率和质量,进而为项目的成功奠定坚实基础。深入探究IPD流程的五个阶段与项目成功之间...
IPD流程分为几个阶段   4  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,其中的创新管理与实践更是蕴含着丰富的经验和深刻的智慧,对众多企业具有重要的借鉴意义。IPD流程的核心架构IPD流程旨在打破部门墙,实现跨部门的高效协作,将产品开发视为一个整体的流程。它涵盖了从市场需求分析...
华为IPD是什么   3  
  IPD(Integrated Product Development)研发管理体系作为一种先进的产品开发模式,在众多企业的发展历程中发挥了至关重要的作用。它不仅仅是一套流程,更是一种理念,一种能够全方位提升企业竞争力,推动企业持续发展的有效工具。深入探究IPD研发管理体系如何助力企业持续发展,对于众多渴望在市场中立足并...
IPD管理流程   3  
  IPD(Integrated Product Development)流程管理旨在通过整合产品开发流程、团队和资源,实现产品的快速、高质量交付。在这一过程中,有效降低成本是企业提升竞争力的关键。通过优化IPD流程管理中的各个环节,可以在不牺牲产品质量和性能的前提下,实现成本的显著降低,为企业创造更大的价值。优化产品规划...
IPD流程分为几个阶段   4  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用