Поиск индексов начального и конечного символов в Spacy

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

Пример моих тренировочных данных:

TRAIN_DATA = [

('Behaviour Skills include Communication, Conflict Resolution, Work Life Balance,
 {'entities': [(25, 37, 'BS'),(40, ,60, 'BS'),(62, 79, 'BS')]
 })
            ]

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

Например: в случае первой строки, где я говорю, что навыки поведения включают в себя общение и т. д., я вручную вычисляю расположение индекса для слова общение, которое равно 25,37.

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


person Django0602    schedule 18.02.2021    source источник
comment
Вы пробовали использовать Python str.find()?   -  person krisograbek    schedule 18.02.2021
comment
Неа. Но чтобы использовать это, разве мне не пришлось бы искать для каждого слова отдельно?   -  person Django0602    schedule 18.02.2021


Ответы (1)


Здесь может помочь использование str.find(). Тем не менее, вам нужно просмотреть как предложения, так и ключевые слова.

keywords = ['Communication', 'Conflict Resolution', 'Work Life Balance']
texts = ['Behaviour Skills include Communication, Conflict Resolution, Work Life Balance', 
        'Some sentence where lower case conflict resolution is included']

LABEL = 'BS'
TRAIN_DATA = []

for text in texts:
    entities = []
    t_low = text.lower()
    for keyword in keywords:
        k_low = keyword.lower()
        begin = t_low.find(k_low) # index if substring found and -1 otherwise
        if begin != -1:
            end = begin + len(keyword)
            entities.append((begin, end, LABEL))
    TRAIN_DATA.append((text, {'entities': entities}))

Выход:

[('Behaviour Skills include Communication, Conflict Resolution, Work Life Balance', 
{'entities': [(25, 38, 'BS'), (40, 59, 'BS'), (61, 78, 'BS')]}), 
('Some sentence where lower case conflict resolution is included', 
{'entities': [(31, 50, 'BS')]})]

Я добавил str.lower() на всякий случай, если вам это может понадобиться.

person krisograbek    schedule 19.02.2021