Używam następującej funkcji, aby określić, czy tekst ma słowa (lub wyrażenia) z listy:

def is_in_text(text, lista=[]):
    return any(i in text for i in lista)

Mogę przejść do tej funkcji lista słów i wyrażeń, które chciałbym znaleźć w tekście. Na przykład następujący kod:

text_a = 'There are white clouds in the sky'
print(is_in_text(text_a, ['clouds in the sky']))

Wróci

True

Działa to, jeśli interesuje mnie teksty, które wspominają "chmury" i "niebo". Jeśli jednak tekst zmienia się nieznacznie, nie mogę już go wykryć. Na przykład:

text_b = 'There are white clouds in the beautiful sky'
print(is_in_text(text_b, ['clouds in the sky']))

Zwróci fałszywe.

Jak mogę zmodyfikować tę funkcję, aby móc znaleźć teksty zawierające obie słowa, ale niekoniecznie w określonej kolejności? W tym przykładzie chciałbym szukać "" chmury "+" niebo "".

Aby być jasnym, interesuje mnie teksty zawierające oba słowa. Chciałbym mieć funkcję, która poszukuje tego rodzaju kombinacji, bez konieczności ręcznego wprowadzania wszystkich tych warunków.

0
Eduardo Escobar 26 luty 2019, 00:29

2 odpowiedzi

Najlepsza odpowiedź

Możesz ponownie napisać is_in_text, aby sprawdzić, czy każde słowo w dowolnej liście słów, które chcesz sprawdzić, znajduje się w ciągu:

def is_in_text(text, lista=[]):
    isin = True
    for word in lista:
        isin = isin and (word in text)
    return isin

Na przykład.

text_a = 'There are white clouds in the sky'
print(is_in_text(text_a, ['cloud', 'sky']))

Zwraca True

Podczas

text_a = 'There are white clouds in the sky'
print(is_in_text(text_a, ['dog', 'sky']))

Zwraca False

Wymaga to, abyś wiedział, jakie słowa, które chcesz dopasować do dwóch ciągów. Jeśli chcesz sprawdzić wszystkie słowa w swoim ciągu, możesz podzielić swój ciąg na spacje.

Na przykład.

text_b = 'There are white clouds in the beautiful sky'
print(is_in_text(text_b, 'clouds in the sky'.split(' ')))

Teraz zwraca True

Edytować:

Myślę, że prawdopodobnie powinieneś myśleć, co próbujesz zrobić, ponieważ będzie to dość delikatne, ale na podstawie tego, co opisujesz to działa:

def is_in_text(text, lista=[]):
    isin = False
    for string in lista:
        sub_isin = True
        for substr in string.split(' '):
            sub_isin = sub_isin & (substr in text)

        isin = isin or sub_isin
    return isin

Na przykład.

text_a = 'There are white clouds in the sky'
print(is_in_text(text_a, ['rain', 'cloud sky']))

Ocenia True

Podczas

text_a = 'There are white clouds in the sky'
print(is_in_text(text_a, ['rain', 'dog sky']))

Ocenia False

0
dan_g 25 luty 2019, 22:12

Lepszym sposobem na to, aby najpierw przekonwertować tekst na listę np.

a = ["white", "clouds"]

Następnie masz listę słów kluczowych:

b = ["clouds", "red"]

Następnie wykonaj:

>>> set(a).intersection(b)

Która zwraca:

{'chmury'}

0
Leo Naylor 25 luty 2019, 21:52