Сравнение списков для столбца списков pandas - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть pandas фрейм данных, представляющий библиотеку. Столбцы представляют метаданные, такие как автор, заголовок, год и текст. Текстовый столбец содержит списки с текстом книги, где каждый элемент списка представляет предложение в книге (см. Ниже)

     Author  Title   Text
0    Smith   ABC    ["This is the first sentence", "This is the second sentence"]
1    Green   XYZ    ["Also a sentence", "And the second sentence"]

Я хочу провести некоторый анализ НЛП по предложениям. Для отдельных примеров я бы использовал сравнение списков, но как я могу использовать сравнение списков для столбца наиболее подходящим способом Pythoni c?

Что я хочу сделать, это, например, создать новый столбец со списком предложений, содержащих слово "the", например, в этом примере: Как проверить, содержит ли строка одну из подстрок в список в pandas?

Однако они используют фрейм данных со строковым столбцом, а не столбцом списка.

1 Ответ

2 голосов
/ 24 апреля 2020

Вы можете сделать это, используя DataFrame.apply и регулярное выражение.

import re
import pandas as pd

data = {
    'Author': ['Smith', 'Green'],
    'Title' : ['ABC', 'XYZ'],
    'Text' : [
        ["This is the first sentence", "This is the second sentence"],
        ["Also a sentence", "And the second sentence"]
    ]
}

df = pd.DataFrame(data)

tokens = [
    'first',
    'second',
    'th'
]

def find_token(text_list, re_pattern):
    result = [
        text
        for text in text_list
        if re.search(re_pattern, text.lower())
    ]
    if result:
        return result
    return

for token in tokens:
    re_pattern = re.compile(fr'(^|\s){token}($|\s)')
    df[token] = df['Text'].apply(lambda x: find_token(x, re_pattern))

соответствует совпадению с токеном word.
Таким образом, должен быть пробел или начало / конец предложения.
re.compile(r'(^|\s)') означает пробел или начало.
re.compile(r'($|\s)') означает пробел или конец.

Если вы используете 'th' в качестве токена, результат будет None.

Используйте токены как ['first', 'second', 'th'], результат будет следующим.

  Author Title                                               Text  \
0  Smith   ABC  [This is the first sentence, This is the secon...   
1  Green   XYZ         [Also a sentence, And the second sentence]   

                          first                         second    th  
0  [This is the first sentence]  [This is the second sentence]  None  
1                          None      [And the second sentence]  None  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...