Найдите документ, который соответствует большей части шаблона регулярных выражений, используя pymongo - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть база данных MongoDB, как показано ниже. Для данного ввода текста я пытаюсь получить «значение», если слова в вводе текста соответствуют «синонимам». Я попробовал это с помощью $ regex в mongodb. Это возвращает много документов. Чтобы отфильтровать результаты, я хочу получить документы , в которых шаблон регулярного выражения соответствует наибольшему числу синонимов . Например, если я нахожу «Услуги мобильного широкополосного доступа», необходимо вернуть первый документ в приведенном ниже примере. Я хочу несколько лучших (Пример: 3) Как я могу это сделать?

Мало документов в базе данных

{"_id":"5ca714cc1b42f3399afaaf6f",
"value":"Mobile Broadband",
"synonyms":
    [
    "Mobile Broadband",
    "MBB",
    "mobile broad band",
    "mobil broadband",
    "mobile broad bend",
    "data for a bite",
    "data for a giga meal",
    "data giga meal",
    "data bite",
    "data for a download feast",
    "data download feast",
    "time based packages",
    "mobile boradband",
    "mobile boardband"
    ]
}
{"_id":"5ca714cc1b42f3399afaaf70",
"value":"Home Broadband",
"synonyms"
    [
    "Home Broadband",
    "HBB",
    "home broad band",
    "home broadbend",
    "home broad band",
    "mini package",
    "ultra package",
    "office ultra package",
    "starter package",
    "lite package",
    "lite plus",
    "office plus",
    "booster",
    "mega booster",
    "home boardband",
    "home boradband"
    ]
}

get_entities.py

Пример 'предложения' - Какие пакеты мобильного широкополосного доступа доступны?

from nltk.corpus import stopwords

def get_entity(sentence, collection):

    words = sentence.split(" ")
    stop_words = list(stopwords.words('english'))
    words = [w for w in words if not w in stop_words]

    words = [x.lower() for x in words]
    pattern = '|'.join(words)

    results = []
    if len(pattern) > 0:
        results = collection.find({"synonyms": {"$regex": pattern, "$options": "i"}})

    entities = []
    for result in results:
        entities.append(result['value'])

    return entities
...