Сгенерируйте n-грамм для определенного столбца в mysql db - PullRequest
1 голос
/ 11 июня 2019

Я пишу код для генерации n-грамм для каждой записи в таблице, читая определенный столбец.

def extract_from_db(inp_cust_id):
    sql_db = TatDBHelper()
    t_sql = "select notes from raw_data where customer_id = {0}"
    db_data = sql_db.execute_read(t_sql.format(inp_cust_id))
    for row in db_data:
        text = row.values()
        bi_grams = generate_ngrams(text[0].encode("utf-8"), 2)
        print bi_grams

def generate_ngrams(sentence, n):
    sentence = sentence.lower()
    sentence = re.sub(r'[^a-zA-Z0-9\s]', ' ', sentence)
    tokens = [token for token in sentence.split(" ") if token != ""]
    ngrams = zip(*[tokens[i:] for i in range(n)])
    return [" ".join(ngram) for ngram in ngrams]

Я получаю вывод наподобие:

['i highly', 'highly recommend', 'recommend it']
['the penguin', 'penguin encounter', 'encounter was', 'was awesome']

Я хочу, чтобы вывод выглядел как показано ниже, кто-нибудь может мне помочь получить это.

['i highly',
 'highly recommend',
 'recommend it',
 ...
]

1 Ответ

0 голосов
/ 11 июля 2019

создайте другой список all_ngrams и продолжайте добавлять значения к нему, используя .extend(), и, наконец, у вас будут все ngrams в одном списке.

Попробуйте это:

def extract_from_db(inp_cust_id):
    sql_db = TatDBHelper()
    t_sql = "select notes from raw_data where customer_id = {0}"
    db_data = sql_db.execute_read(t_sql.format(inp_cust_id))
    all_ngrams = []
    for row in db_data:
        text = row.values()
        bi_grams = generate_ngrams(text[0].encode("utf-8"), 2)
        all_ngrams.extend(bi_grams)
    print all_ngrams
...