首页 > 解决方案 > 如何在Python中将字符串拆分为单词,即使单词有标点符号

问题描述

我正在尝试使用一本长字典制作法语翻译。我想将字符串拆分成单词,即使单词有标点符号。

我已经尝试将带有标点符号的项目添加到字典中,例如 ["Hello!": "Bonjour!"],但这会花费相当长的时间,并且可能有更紧凑和简单的方法可以做到这一点。

代码:

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!"]
 ["__""]

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

标签: python

解决方案


看看这个,它可以帮助你忽略字母的大小写。对于标点符号,您可以将其删除,任何不在 az 或 AZ 范围内的内容都会从文本中删除。

稍作改动,所以如果没有有效的翻译,他还是会附加原件:

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等其他技术。


推荐阅读