在Python中,如何将字符串拆分为单词(即使单词有标点符号)

2024-09-29 18:53:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用一本长字典做一个法语翻译。我想把一个字符串拆分成单词,即使单词有标点符号。你知道吗

我尝试过在字典中添加带有标点符号的条目,例如[“你好!”“你好!”],但这需要相当长的时间,而且可能有一种更紧凑、更简单的方法。你知道吗

代码:

frtext = "__"
FRTEXT = []


french = {

    "hello": "bonjour",
    "Hello": "Bonjour",
    "What": "Qu'est-ce que"
}



text = input("Enter text: ")
TEXT = text.split()

for x in range(len(TEXT)):

    if TEXT[x] in french:
        frtext = french[TEXT[x]]

    FRTEXT.append(frtext)

预期产量:

 ["Hello!"]
 ["Bonjour!"]

实际输出:

 ["Hello!"]
 ["__""]

有没有办法做到这一点,如果有,你怎么做?任何答案都将不胜感激。你知道吗


Tags: 方法字符串textinhello字典时间条目
3条回答

严格遵守您的守则:

for x in range(len(TEXT)):

    if TEXT[x] in french:
        frtext = french[TEXT[x]]

    FRTEXT.append(frtext)

您的追加调用是在if条件之外进行的。因此,您将附加与dictionary键匹配的单词,但如果文本[x]与dictionary键不匹配,您也将附加“\uuuuuuuuux”字符串。你知道吗

查看this,它可以帮助您忽略字母的大小写。对于标点符号,您可以删除它,任何不在a-z或a-z范围内的内容都会从文本中删除。你知道吗

一点变化,如果没有有效的翻译,他会附加原文:

for word in TEXT:
    word = word.lower()
    if word in french:
        frtext = french[word]
    else:
       frtext = word

    FRTEXT.append(frtext)

对代码的改进:

frword = ''
frtext = []


translator = {
    'hello': 'bonjour',
    'what': 'qu\'est-ce que'
}

text = input('Enter text: ')

for word in text.split():
    word = word.lower()
    word = translator.get(word, word)
    frtext.append(word)

print(' '.join(frtext))

删除标点符号很简单:

import string

final_text = ''
letters = string.ascii_lowercase + string.ascii_uppercase + ' '
for letter in text:
    if letter in letters:
        final_text += letter

然后处理final_text。你知道吗

当然,这是一个简单的解决方案,更进一步将需要更多的知识和使用其他技术,如NLP。你知道吗

对于复杂的文本工作,最好使用NLTK。它有许多好的文本算法,可以用来简化文本处理(请注意,它是一个相当大的库):

import nltk

text = 'Hello! Hello hello, Hello and hello! Hello!'

tokenizer = nltk.WordPunctTokenizer()
tokenizer.tokenize(text)
['Hello',
 '!',
 'Hello',
 'hello',
 ',',
 'Hello',
 'and',
 'hello',
 '!',
 'Hello',
 '!']

相关问题 更多 >

    热门问题