Разбор происхождения / назначения из строки (NLTK) - PullRequest
0 голосов
/ 08 июля 2019

У меня есть некоторые данные с названиями предложений путешествий.

import pandas as pd
import nltk
import numpy as np

datadict = {'deals_raw_text': {0: 'Cheap flights from Moscow to NEW DELHI, INDIA from €255',
  1: '5* Qatar Airways flights from the UK to India (Kochi, Chennai, Ahmedabad, Bangalore, Kozhikode) from £340!',
  2: "What a corker: 2nts in Portugal's wine country from £155pp incl. design hotel, flights & breakfast",
  3: 'WIZZ AIR New Route from Budapest to KAZAN, RUSSIA',
  4: 'Weekend in Venice from only 105 € with flights and hotel',
  5: 'Oslo, Norway to New York, USA for only €184 roundtrip',
  6: 'Wizz Air announces new route between Budapest and Kazan!',
  7: 'Backpacking in 2019: 3 weeks by Costa Rica & Panama City for 640 € with accommodation flights',
  8: 'Vacaciones en Croacia: 3/7 noches de hotel + vuelos directos desde solo 259€',
  9: 'Business Class from Stockholm, Sweden to Singapore for only €1196 roundtrip (lie-flat seats)'}}

testdf = pd.DataFrame(datadict)

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

1: Origin: 'UK', Destination: 'India'
2: Origin: np.nan, Destination: 'Portugal'
3: Origin: 'Budapest', Destination: 'Kazan, Russia'
...
9: Origin: 'Stockholm, Sweden', Destination: 'Singapore'

Как видите, строки не согласованы, но иногда следуют структуре от f '{Origin} до {Destination} для {Price}'. Это недостаточно согласованно для написания функции на основе правил, поэтому я обратился к NLTK и попытался токенизировать элементы для идентификации городов. Правда, я не очень знаком с regex и nltk.

Написал функцию токенизации укусов:

def ie_preprocess(text=df.deals_raw_text[0]):
    sentences = nltk.sent_tokenize(text)
    sentences = [nltk.word_tokenize(sent) for sent in sentences]
    sentences = [nltk.pos_tag(sent) for sent in sentences]

    return sentences

Теперь мы применяем функцию: (Я уверен, что грамматическая строка неверна, но это то, что я придумал)

grammar = "NP: {<NNP>?<TO>*<NNP>}"

results = []

for i in enumerate(testdf):
    print (i[1])
    cp = nltk.RegexpParser(grammar)
    r = cp.parse(ie_preprocess(i[1])[0])
    results.append(r)

Но я застрял здесь. Как я могу превратить эти токенизированные кортежи в желаемый результат городов происхождения / назначения? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...