как удалить пустые кавычки из списка, используя python? - PullRequest
0 голосов
/ 15 марта 2020

У меня есть сценарий 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

Так как решить эту проблему?

1 Ответ

0 голосов
/ 15 марта 2020

Давайте откроем Python REPL и go через ваш код.

Я предполагаю, что первая строка указывает входную строку, чтобы присвоить ее переменной.

>>> 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
'الموضوع'
>>>
...