如何在python中从单词中分离标点符号?

如何在python中从单词中分离标点符号?,python,string,spell-checking,Python,String,Spell Checking,我正在尝试创建一个拼写检查函数,它读取一个文本文件,其中包含一段包含几个拼错单词的文章。例如:“我最喜欢的科目是:物理、数学、化学和生物——我觉得有必要在课后用iPad做综合笔记。”我有三个问题要解决: 目前,程序认为数学是一个不正确的单词,因为单词后面有逗号。我认为,为了解决这个问题,最好在文本文件中拆分字符串,如下所示:[“我的”、“最喜欢的”、“主题”、“是”、“是”、“物理”、“数学”、“等等]。如何在不使用任何导入的python函数(例如string或regex(re)函数)的情况下将

我正在尝试创建一个拼写检查函数,它读取一个文本文件,其中包含一段包含几个拼错单词的文章。例如:“我最喜欢的科目是:物理、数学、化学和生物——我觉得有必要在课后用iPad做综合笔记。”我有三个问题要解决:

  • 目前,程序认为数学是一个不正确的单词,因为单词后面有逗号。我认为,为了解决这个问题,最好在文本文件中拆分字符串,如下所示:[“我的”、“最喜欢的”、“主题”、“是”、“是”、“物理”、“数学”、“等等]。如何在不使用任何导入的python函数(例如string或regex(re)函数)的情况下将字符串拆分为单词和标点符号

  • 我目前正在通过迭代文本文件中的每个单词,将每个单词与公认的英语单词词典进行比较。是否有更好的方法对列表进行预处理,以快速识别单词是否包含给定元素,从而提高程序的运行时间

  • 有几个词,如“电子书”和“iPad”,是下面函数
    是否有效\u word
    中使用规则的例外(即,单词必须以大写字母开头,所有其他字母都是小写,或者单词中的所有字符都必须是大写)。有没有办法检查字符串是否为有效单词

  • 任何帮助都将不胜感激

    def get_words():
        with open( "english.txt" ) as a:
             words = a.readlines()
        words = [word.strip() for word in words]
        return words
    
    isWord = get_words()
    
    def is_valid_word(st):
        if isinstance(st, str):
            st_lower = st.lower()
            if st_lower in isWord:
                if (st[0:len(st)].isupper() or st[0:len(st)].islower()) or (st[0].isupper() and st[1:len(st)].islower()) or st[0:len(st)].isupper():
                    return (True)
                else: 
                    return(False)
            else:
                return (False)
        else:
            return (False)
    
    def spell_check_file( file ):
        incorrectWords = []  # Will contain all incorrectly spelled words.
        num = 0  # Used for line counter.
        with open(file, 'r') as f:
            for line_no, line in enumerate(f):
                for word in line.split():
                    if is_valid_word(word) == False:
                        incorrectWords.append(line_no)
                        incorrectWords.append(word)
            for f in incorrectWords:
                return incorrectWords
                print (incorrectWords)
    
    spell_check_file("passage.txt")
    

    这种任务就是正则表达式的用途。在没有正则表达式的情况下尝试这样做是一种自我惩罚

    >>重新导入
    >>>pattern=re.compile(r“[\w']+|\s+|[^\w'\s]+”)
    >>>我最喜欢的科目是:物理、数学、化学)
    [My','favorite','subjects','are',':','Physics',',
    “数学”,“化学”
    

    请注意,我在匹配单词的部分中包含了
    ,所以像“不”这样的单词将保持完整。

    为什么不使用Python内置函数?
    。isupper()
    。islower()
    都是内置函数。当我说内置函数时,我指的是需要导入的任何函数(例如字符串)因为我正在使用的练习本指示我们只使用split()、strip()、replace()等。抱歉,我认为我原来的问题不清楚-我将相应地修改它。提供了一种仅使用split和replace(即无导入)将单词分隔为单词的方法。但是有没有一种方法可以在不使用正则表达式的情况下做到这一点?理论上是肯定的。您可以编写自己的代码,基本上实现这个正则表达式的功能;扫描连续字符,并在下一个连续字符位于不同的字符类时生成一个子字符串。(三个字符类是单词字符、撇号、空格字符和其他所有字符。)不过,我认为在这里避免正则表达式没有什么教育价值,因为如果你想学习如何进行字符串操作,那么你真的应该学习如何使用正则表达式。