Слова в контексте - панды - PullRequest
       1

Слова в контексте - панды

0 голосов
/ 07 декабря 2018

У меня есть список, и каждый раз, когда слово из этого списка появляется в тексте, я хотел бы заменить следующие два слова

Пример: list = ['Mrs.', 'Miss',«Мисс», «Леди», «Мистер», «Сэр», «Лорд»]

фраза = «Извините, но леди дома».

resultat = 'Извините, но леди дома.'

Я пытаюсь сделать это в кадре данных

Я пытался:

def words_contexte(df):

    titres_list = ['Mrs.', 'Miss', 'Ms.', 'Lady', 'Mr.', 'Sir', 'Lord']

    data_frame_split = df['C'].str.split()
    words_index = df['C'].str.data_frame_split[data_frame_split.index(titres_list) + 2]
    df['C'] = df['C'].str.replace(words_index, '<next_words>')

    return df

Мой фрейм данных:

       A          B                                     C
  French      house                      Are you at home?
 English      house   I'm sorry, but the lady is at home.
  French  apartment          His name is Sir Ringo Starr.
  French      house      I'm Mrs. Carla and I have a dog.
 English  apartment                  Hi Miss how are you?

Хороший вывод

       A          B                                     C
  French      house                      Are you at home?
 English      house   I'm sorry, but the lady <next_words> home.
  French  apartment          His name is Sir <next_words>.
  French      house      I'm Mrs. <next_words> I have a dog.
 English  apartment                  Hi Miss <next_words> you?

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Вы можете немного изменить свою функцию, чтобы применять ее по строкам:

Идея состоит в том, чтобы получить каждую строку, разбить ее и выполнить итерацию по каждому слову.Вы проверяете, принадлежит ли оно к предложению, получаете индекс, заменяете следующее слово и заменяете слово в позиции + 2.

def replace_titre(row):
    data_frame_split = row.split()
    for titre in titres_list:
        if titre in data_frame_split:
            # Get the index of the word
            words_index = list(data_frame_split).index(titre)

            # Replace the +1 / following word
            data_frame_split[words_index + 1] = "<next_words>"

            # Delete the +2 word
            del data_frame_split[words_index + 2]
    return data_frame_split

Затем вы можете позвонить:

df = df.apply(replace_titre)
0 голосов
/ 07 декабря 2018

Вот способ сделать это, избегая циклического повторения каждого списка:

list_ = ['Mrs.', 'Miss', 'Ms.', 'lady', 'Mr.', 'Sir', 'Lord']

def fun(x, y):
    in1d = np.in1d(x.split(' '), y)
    in1d_drop = np.roll(in1d, 2)
    in1d_replace = np.roll(in1d, 1)
    l = np.where(in1d_drop, '', x.split(' '))
    l = np.where(in1d_replace, '<next_words>', l)
    return ' '.join(l)

И просто примените fun к каждой строке в столбце C:

df ['C'] = df['C'].apply(fun, y=list_)

print(df)
      A          B                                            C
0   French      House                             Are you at home?
1  English      House  I'm sorry, but the lady <next_words>  home.
2   French  Apartment                His name is Sir <next_words> 
3   French      House          I'm Mrs. <next_words>  I have a dog
4  English  Apartment                   Hi Miss <next_words>  you?
0 голосов
/ 07 декабря 2018

Подключение apply к функции будет работать, и разделить значение, и зациклить перечисление списка разделения, проверить, если заголовок фразы находится в l, если это так, назначить гнезда два элемента,затем после всего этого цикла return:

def f(x):
   l = ['Mrs.', 'Miss', 'Ms.', 'Lady', 'Mr.', 'Sir', 'Lord']
   l2=x.split()
   for i,v in enumerate(l2):
      if v.title() in l:
         l2[i:i+3]=l[l.index(v.title()):l.index(v.title())+3]
         break
   return ' '.join(l2)


df['C']=df['C'].apply(f)
print(df)

Вывод:

         A          B                                      C
0   French      house                       Are you at home?
1  English      house  I'm sorry, but the Lady Mr. Sir home.
2   French  apartment                   His name is Sir Lord
3   French      house        I'm Mrs. Miss Ms. I have a dog.
4  English  apartment                  Hi Miss Ms. Lady you?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...