【问题标题】:how to remove the empty quotes from the list using python?如何使用python从列表中删除空引号?
【发布时间】:2020-03-15 19:15:36
【问题描述】:

我有一个 python 脚本,可以在进行文本分析之前对文本进行预处理。一些清理文本的功能是:

  • 删除少于两个字符的字符串。
  • 标记文本

问题是第一个函数返回一个列表,第二个函数获取返回的列表并返回一个列表,因此它成为列表中的列表。像这样:

['[', "'الموضوع", "'", ',', "'إجتماع", "'", ',', "'بين", "'", ',',
"'الجنة", "'", ',', "'البحرية", "'", ',', "'الفرعية", "'", ',',]']

结果必须是这样的:

['الموضوع', 'إجتماع', 'بين', 'الجنة', 'البحرية', 'الفرعية',]

移除停用词的返回结果:

['ا', 'ل', 'م', 'و', 'ض', 'و', 'ع', ' ', 'إ', 'ج', 'ت', 'م', 'ا', 'ع', ' ', 'ب', 'ي', 'ن', ' ', 'ا', 'ل', 'ج', 'ن', 'ة', ' ', 'ا', 'ل', 'ب', 'ح', 'ر', 'ي', 'ة', ' ', 'ا', 'ل', 'ف', 'ر', 'ع', 'ي', 'ة', ' ', 'و', 'ن', 'ظ', 'ي', 'ر', 'ت', 'ه', 'ا', ' ', 'ف', 'ي', ' ', 'م', 'ب', 'س', 'و', 'ط', ' ', 'ا', 'ل', 'م', 'س', 'ت', 'ن', 'د', ' ', 'ب', 'ر', 'ق', 'ي', 'ة', ' ', 'ر', 'ق', 'م', ' ', '1', '7', '1', 'ع', ' ', 'ت', 'ا', 'ر', 'ي', 'خ', ' ', '1', '2', '1', ]

结果必须在哪里:

['تاريخ', '1212019','الموضوع', 'إجتماع', 'بين', 'الجنة', 'البحرية', 'الفرعية',]

代码

def remove_1char(text):
    tokens = text.split()
    tokens = [word for word in tokens if len(word) > 1]   
    result = str(tokens)
    write_file("remove_1char.txt",result)
    return result

def tokenize_text(text):
    tokens=word_tokenize(text)
    write_file("tokenize_text.txt",tokens)
    return tokens



 def remove_stopwords(tokens):
       write_file("tokens_before_remove.txt",tokens)
       stop_word_list = set(stopwords.words('arabic'))
       clean_tokens= [tok for tok in tokens if tok not in stop_word_list]
       write_file("remove_stop_word.txt",clean_tokens)
       return clean_tokens

def clean_text(text):
    rmws = remove_whiteSpace(text)
    rmp = remove_punctuations(rmws)
    rmd = remove_diacritics(rmp)
    rmrc = remove_repeating_char(rmd)
    rm1c = remove_1char(rmrc)
    clean_tokens = remove_stopwords(rm1c)
    write_file("result.txt",clean_tokens)
    return clean_tokens

那么如何解决这个问题呢?

【问题讨论】:

  • result = str(tokens) 并不像您认为的那样 - 它返回列表的字符串表示形式。如果你想要一个字符串,只需使用' '.join(tokens) 之类的东西。此外,你并没有真正展示你是如何调用函数的。
  • @MrBeanBremen 您的评论工作感谢您对upvote 做出回答......但现在我在删除停用词中有一个错误,它也返回一个错误的答案。你能帮帮我吗?
  • 我不确定您到底在做什么,问题是什么 - 您可以编辑问题以使其更清楚吗?

标签: python list tokenize


【解决方案1】:

让我们打开一个 Python REPL 并检查您的代码。

我假设第一行指定输入字符串,将其分配给变量。

>>> l = ['الموضوع', 'إجتماع', 'بين', 'الجنة', 'البحرية', 'الفرعية',]
>>> l
['الموضوع', 'إجتماع', 'بين', 'الجنة', 'البحرية', 'الفرعية']

您没有指定调用哪个函数,但我假设您首先为每个输入字符串调用函数remove_1char。我们将逐行调用函数的行,以查看列表第一项的结果,我们将其称为text

>>> text = l[0]
>>> tokens = text.split()
>>> tokens
>>> ['الموضوع']

由于输入序列中的每个单词都由一个单词组成,因此输出符合预期。

>>> tokens = [word for word in tokens if len(word) > 1]
>>> tokens
['الموضوع']

并且所有单词都有超过 1 个字符。也符合预期。

>>> result = str(tokens)
>>> result
"['الموضوع']"
>>>

在这一行中,列表的字符串表示分配给结果。这可能不是你想要的。我认为您想将令牌连接到单个字符串。这可以通过join 函数来完成。

>>> result = ' '.join(tokens)
>>> result
'الموضوع'
>>>

【讨论】:

  • 是的,我解决了这个问题,如果你看到我更新的问题,我还有第二个问题。谢谢。
  • @DevDj StackOverflow 并非旨在为您遇到的每个新问题编辑问题。相反,一个问题应该作为其他人的知识来源,因此每个问题都应该关注一个特定的问题。如果您还有其他问题,请为其创建一个新问题。
猜你喜欢
  • 2020-04-05
  • 2022-01-08
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 2021-04-28
  • 1970-01-01
相关资源
最近更新 更多