Jak za pomocą Pythona znaleźć miejsce w zdaniu? Na przykład czwarte słowo w zdaniu.

sentence = "It's a beautiful world."
word = "world"

locate_word(word,sentence) = 4
2
yishairasowsky 19 grudzień 2019, 16:03
 – 
Kent Shikama
19 grudzień 2019, 16:07
 – 
Diptangsu Goswami
19 grudzień 2019, 16:08
Problem polega na podzieleniu zdania na pojedyncze słowa. Prosty sentence.split() daje ["It's", 'a', 'beautiful', 'world.'], a "world." to nie to samo co "world". Możesz więc usunąć interpunkcję z ciągu (sentence = sentence.translate(str.maketrans('', '', string.punctuation))), ale zmieni to również "It's" na "Its".
 – 
Matthias
19 grudzień 2019, 16:12

5 odpowiedzi

Musisz określić, w jaki sposób chcesz podzielić zdanie. Znalazłem przykład z innej odpowiedzi. Możesz to zmodyfikować w zależności od potrzeb.

import re

sentence = "It's a beautiful world."
word = "world"

def locate_word(word, sentence):
    # https://stackoverflow.com/a/6181784/12565014
    wordList = re.sub("[^\w]", " ",  sentence).split()
    return wordList.index(word)

locate_word(word,sentence) # output 4
0
JxCode 19 grudzień 2019, 16:15
To jest fałsz, jeśli słowo to it's
 – 
Reznik
19 grudzień 2019, 16:16

Uważam, że jest to dość proste rozwiązanie i łatwe do odczytania;

sentence = "It's a beautiful world. Worldwide in the world, for the world"
word = "world"
ax = sentence.split(' ')

import re
for i in ax:
    if len(re.findall('\\world\\b',i)) > 0:
        print(ax.index(i))

Wynik:

3
7
10
0
Celius Stingher 19 grudzień 2019, 16:17
1
To nieprawda, jeśli jedno ze słów brzmi „na całym świecie”, zawiedzie
 – 
Reznik
19 grudzień 2019, 16:10
Edytowano. Mam nadzieję, że teraz jest w porządku.
 – 
Celius Stingher
19 grudzień 2019, 16:17

W powyższym przykładzie zadziała

import re
sentence = "It's a beautiful world."
word = "world"
lst = sentence.split()
for i in range(0,len(lst)):
    if "." in lst[i]:
        lst[i] = lst[i].replace(".", "")
print(lst.index(word))
0
Vaibhav 19 grudzień 2019, 16:26

Podziel zdanie (domyślnie jest podzielone spacjami), a następnie przejrzyj listę, którą otrzymałeś. Jeśli twoje słowo znajduje się na liście, zwróci ci jego indeks. A potem dodajesz +1 do indeksu, który masz, ponieważ liczenie list zaczyna się od 0.

import string
def locate_word(word, sentence):
    splitted = sentence.split()
    indexes = []
    for x in splitted:
        if word in x and len(word) == len(x.strip(string.punctuation)):
            indexes.append(splitted.index(x) + 1)
    return print(indexes)

locate_word('worldwide', "It's a worldwide beautiful world. worldwide")
0
Cappi 19 grudzień 2019, 16:42
To jest dosłownie moja pierwsza próba (z wyjątkiem +1) i kończy się niepowodzeniem w przypadkach, w których world jest zawarte w ciągu, na przykład worldwide, jak wskazał @Reznik.
 – 
Celius Stingher
19 grudzień 2019, 16:20
Następnie po prostu usuwasz interpunkcję (za pomocą importu ciągów) i dopasowujesz długości wyszukiwanych słów, da to poprawną odpowiedź. Edytowałem swój kod zgodnie z moim komentarzem, dodałem też obsługę, że jeśli świat jest w zdaniu wielokrotnie.
 – 
Cappi
19 grudzień 2019, 16:43

Możesz podzielić zdanie w odstępach, a następnie wyszukać słowo na liście.

Edycja: na podstawie komentarza może być również konieczne usunięcie interpunkcji.

import string


def locate_word(word, sentence):
    sentence = sentence.translate(str.maketrans('', '', string.punctuation))
    ListOfWord = sentence.split(" ")
    return ListOfWord.index(word)
-1
Petru Tanas 19 grudzień 2019, 16:16
To jest fałsz, jeśli słowo to it's
 – 
Reznik
19 grudzień 2019, 16:16