Получить позицию n-грамматических слов в предложении - PullRequest
0 голосов
/ 17 марта 2020

В python я хочу получить позицию слова в предложении. Соответствующие строки могут состоять из нескольких слов.

sentence = "Bloomberg announced today that Gordian Capital will implement the solution to help its clients pursue new fund opportunities faster."

search_str = "Bloomberg" 

Ожидаемый результат:

0

Соответствующая строка может состоять из нескольких слов. В этом случае я хочу получить позицию начала.

search_str = "Gordian Capital" 

Ожидаемый результат:

4

Элемент search_str может быть комбинацией специального символа и чисел, например $5.1 billion. Я пробовал что-то подобное, но оно разбивает первоначальное предложение на слова, и я не знаю, как справиться с n-граммовым регистром.

result = [i+1 for i,w in enumerate(sentence.split()) if w == search_str]

Любое решение будет оценено. Спасибо

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Попробуйте перечисление.

Поскольку вы действительно ищете только позицию первого слова в любой строке поиска, мы можем разделить это тоже, просто попытавшись найти совпадение с первым словом.

Вот одна строка, которая решает проблему:

search_str = "Gordian Capital"

[k for k, v in enumerate(sentence.split()) if v.lower() == search_str.split()[0].lower()]

Результат:

[4]

Вот предложение с более чем одной гордианской столицей.

sentence = "the Bloomberg announced today that Gordian Capital will implement the solution to help Gordian Capital's clients pursue new fund opportunities faster, says Gordian Capital."

[k for k, v in enumerate(sentence.split()) if v.lower() == search_str.split()[0].lower()]

Результат:

[5, 13, 22]

Примечание. Поскольку Python чувствителен к регистру, для лучшего соответствия мы вводим наши термины в нижнем регистре.

Эта часть:

search_str.split()[0].lower()

Разбивает символ пробела (по умолчанию), затем мы берем первый элемент и переформатируем в нижний регистр для соответствия нашей цели.

0 голосов
/ 17 марта 2020
  1. Разделить предложение, используя search_str

result = предложение_сплит (search_str)

Возьмите первый элемент результата и разделите его на пробелы

result = result [0] .split ('')

Может кажется, что это сделано, просто нужно посчитать элементы в результирующем списке с помощью

len (результат)

, но иногда может появиться пустой элемент.

Чтобы избежать этого, список должен быть отфильтрован

result = [элемент для элемента в фильтре (lambda x: x! = "", Result)]

print (len (result))

И все это вы можете написать всего одной строкой:

result = len([elem for elem in filter(lambda x: x != "", sentence.split(search_str)[0].split(" ")) ])
...