Как перебирать строки панд, содержащие списки строк, чтобы проверить, есть ли каждое слово на английском или нет? - PullRequest
1 голос
/ 22 апреля 2019

У меня есть датафрейм pandas, который содержит обзорные тексты.После предварительной обработки текста я получил список строк в каждой строке.Теперь я хочу перебрать каждую строку этих списков строк, чтобы проверить, есть ли каждая строка на английском или нет.Я хочу подсчитать вхождения неанглийских слов, чтобы создать еще один столбец «Вхождения».

Для проверки английского языка я буду использовать библиотеку pyenchant.

Что-то похожее на код ниже



review_text sentiment   error_related
0   [simple, effective, way, new, word, kid]    1   NaN
1   [fh, fcfatgv]   1   NaN
2   [son, loved, easy, even, though, son, first, g...   1   NaN

english_dict = enchant.Dict("en_US")

def enlgish_counter(df, df_text_column):
    number_of_non_english_words = []
    for review in df_text_column:
        for word in review:
            a=0
        if english_dict.check(i)==False:
            a=a+1 
    non_english_words.append(a)

1 Ответ

1 голос
/ 22 апреля 2019

Вы не включили пример данных, поэтому я создал их вручную.Обратите внимание, что мой формат данных может отличаться от вашего.

import pandas as pd
import enchant

english_dict = enchant.Dict("en_US")

# Construct the dataframe
words = ['up and vote', 'wet 0001f914 turtle 0001f602', 'thumbnailшщуй',
       'lobby', 'mods saffron deleted iâ', 'â', 'itâ donâ edit', 'thatâ',
       'didnâ canâ youâ'] 

df = pd.DataFrame()

for word in words:
    record = {'text': word}
    df = df.append(record, ignore_index=True)

# Get texts column
for text in df['text']:
    # Counters
    eng_words = 0
    non_eng_words = 0
    # For every word in text
    for word in text.split(' '):
        # Check if it is english
        if english_dict.check(word) == True:
            eng_words += 1
        else:
            non_eng_words += 1
    # Print the result
    # NOTE that these results are discarded each new text
    print('EN: {}; NON-EN: {}'.format(eng_words, non_eng_words))

Если вы хотите изменить свой набор данных, вам следует заключить этот код в функцию:

def create_occurences(df):
    eng_words_list = []
    non_eng_words_list = []
    for text in df['text']:
        eng_words = 0
        non_eng_words = 0
        for word in text.split(' '):
            if english_dict.check(word) == True:
                eng_words += 1
            else:
                non_eng_words += 1
        eng_words_list.append(eng_words)
        non_eng_words_list.append(non_eng_words)
    df['eng_words'] = pd.Series(eng_words_list, index=df.index)
    df['non_eng_words'] = pd.Series(non_eng_words_list, index=df.index)

create_occurences(df)
df

enter image description here

...