【问题标题】:How to iterate each word through nltk synsets and store misspelled words in separate list?如何通过 nltk 同义词迭代每个单词并将拼写错误的单词存储在单独的列表中?
【发布时间】:2016-09-27 15:45:49
【问题描述】:

我正在尝试获取带有消息的文本文件,并通过 NLTK wordnet synset 函数迭代每个单词。我想这样做是因为我想创建一个拼写错误的单词列表。例如,如果我这样做:

wn.synsets('dog')

我得到输出:

[Synset('dog.n.01'),
 Synset('frump.n.01'),
 Synset('dog.n.03'),
 Synset('cad.n.01'),
 Synset('frank.n.02'),
 Synset('pawl.n.01'),
 Synset('andiron.n.01'),
 Synset('chase.v.01')]

现在如果单词拼错如下:

wn.synsets('doeg')

我得到输出:

[]

如果我返回一个空列表,我想像这样将拼写错误的单词保存在另一个列表中,同时继续遍历文件的其余部分:

mispelled_words = ['doeg']

我不知道该怎么做,下面是我的代码,我需要在变量“chat_message_tokenize”之后进行迭代。名称路径是我要删除的单词:

import nltk
import csv
from nltk.tag import pos_tag
from nltk.corpus import wordnet as wn
from nltk.stem.snowball import SnowballStemmer


def text_function():
    #nltk.download('punkt')
    #nltk.download('averaged_perceptron_tagger')

    # Read in chat messages and names files
    chat_path = 'filepath.csv'
    try:
        with open(chat_path) as infile:
            chat_messages = infile.read()
    except Exception as error:
        print(error)
        return

    name_path = 'filepath.txt'
    try:
        with open(names_path) as infile:
            names = infile.read()
    except Exception as error:
        print(error)
        return

    chat_messages = chat_messages.split('Chats:')[1].strip()
    names = names.split('Name:')[1].strip().lower()

    chat_messages_tokenized = nltk.word_tokenize(chat_messages)
    names_tokenized = nltk.word_tokenize(names)

    # adding part of speech(pos) tag and dropping proper nouns
    pos_drop = pos_tag(chat_messages_tokenized)
    chat_messages_tokenized = [SnowballStemmer('english').stem(word.lower()) for word, pos in pos_drop if pos != 'NNP' and word not in names_tokenized]

    for chat_messages_tokenized 

    if not wn.synset(chat_messages_tokenized):
        print('empty list')

if __name__ == '__main__':
    text_function()    

#    for s in wn.synsets('dog'):
#          lemmas = s.lemmas()
#    for l in lemmas:
#          if l.name() == stemmer:
#              print (l.synset())


    csv_path ='OutputFilePath.csv'
    try:
        with open(csv_path, 'w') as outfile:
            writer = csv.writer(outfile)
            for word in chat_messages_tokenized:
                writer.writerow([word])
    except Exception as error:
        print(error)
        return


if __name__ == '__main__':
    text_function()

提前谢谢你。

【问题讨论】:

  • 你只是循环遍历单词,然后检查返回的列表是否为空,如果是则放入列表中?似乎您已经知道函数的逻辑,但您只是不知道如何编写代码?但是你的解释实际上已经描述了如何编码的伪代码
  • 你的另一个问题与这个问题基本相似,但这个问题的代码更多。

标签: python iteration nltk python-3.5 wordnet


【解决方案1】:

你的解释中已经有了伪代码,你可以按照你解释的那样编码,如下:

misspelled_words = []                 # The list to store misspelled words
for word in chat_messages_tokenized:  # loop through each word
    if not wn.synset(word):           # if there is no synset for this word
        misspelled_words.append(word) # add it to misspelled word list

print(misspelled_words)

【讨论】:

    猜你喜欢
    • 2016-11-09
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2018-11-25
    相关资源
    最近更新 更多