Как искать ключевые слова из предложений в списке значений ключей и получать совпавший результат предложений с относительными ссылками? - PullRequest
0 голосов
/ 17 марта 2020

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

def checkSentence(quote_list, searchItems):
    result_sentence = [all([searchingWord in searchingSentence for searchingWord in searchItems]) for searchingSentence in quote_list]
    return [quote_list[i] for i in range(0, len(result_sentence)) if result_sentence[i]]

checkResult = checkSentence(quote_list, searchItems)
quoteResult_list = []
for quote in checkResult:
    quoteResult_list.append(quote)

print(len(quoteResult_list))
print(quoteResult_list)

И теперь я хотел бы сделать это, чтобы получить предложения («содержание» в данных, скажем так) со ссылками ( "статья"). Это было бы что-то вроде [«Мир сделан из сладкого». «Мир»].

Должно быть два цикла for, в которых первый слой - это поиск предложений, а второй - for-l oop должен получать «статью» предложений. Я понятия не имею, почему это не работает? Похоже, ошибка в item_list ["quote"] и item_list ["article"]? Большое спасибо!

Код следующий:

import json
import os

#    data part
data = {
    "title": "Vulnerable",
    "items": [
        {
            "article": "The World",
            "content": [
                "The world is made of sweet.",
                "The sweet tastes so good.",
            ]
        },
        {
            "article": "The Disaster",
            "content": [
                "That is the sweet wrapping with poison.",
                "Is that true? Are you kidding?",
            ]
        },
        {
            "article": "The Truth",
            "content": [
                "Trust me. That is not sweet!",
                "You see? That is why!",
            ]
        }
    ]
}

#    keywords for searching
searchItems = ["sweet", "is"]

#    deal with data to list
item_list = []
quote_list = []
article_list = []

for item in data["items"]:
    article = item["article"]
    for quote in item["content"]:
        item_list.append({article, quote})
        quote_list.append(quote)
        article_list.append(article)


#    check if sentences include keywords
def checkSentence(item_list, searchItems):
    for sentence in item_list["quote"]:
        result_sentence = [all([searchingWord in searchingSentence for searchingWord in searchItems]) for searchingSentence in sentence]
        sententceResult = [item_list[i] for i in range(0, len(result_sentence)) if result_sentence[i]] 
        for article in item_list["article"]:
            return_article = [all([searchingWord in searchingSentence for searchingWord in searchItems]) for searchingSentence in article]
            quoteResult = [item_list[i] for i in range(0, len(return_article)) if return_article[i]]
    return sententceResult, quoteResult

#    make the searching result as list item
checkResult = checkSentence(item_list, searchItems)
quoteResult_list = []
for quote in checkResult:
    quoteResult_list.append(quote)
print(quoteResult_list)

1 Ответ

1 голос
/ 17 марта 2020

При добавлении статей и цитат к item_list используйте кортежи, поскольку это облегчает поиск совпадений:

item_list.append((article, quote))

Теперь для функции checkSentence:

Поскольку теперь мы используем кортежи, мы можем сохранить и статью, и соответствующее предложение одновременно. Тогда вам нужно только найти ключевые слова в sentence и, если он совпадает, добавить оба article и sentence в список matches. После этого вы просто возвращаете список с результатами.

Вот окончательный код (без данных):

#    keywords for searching
searchItems = ["sweet", "is"]

#    deal with data to list
item_list = []
quote_list = []
article_list = []

for item in data["items"]:
    article = item["article"]
    for quote in item["content"]:
        # use tuples to make later use easier
        item_list.append((article, quote))
        quote_list.append(quote)
        article_list.append(article)

#    check if sentences include keywords
def checkSentence(item_list, searchItems):
    matches = []
    # unpack the tuples and iterate over the list
    for article, sentence in item_list:
        # check for matching key words in sentence
        if all([searchingWord in sentence for searchingWord in searchItems]):
            # add both article and sentence to the matches, if key words are present
            matches.append((article, sentence))
    return matches

#    make the searching result as list item
checkResult = checkSentence(item_list, searchItems)
print(checkResult)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...