Найти расстояние между фразами в тексте - PullRequest
0 голосов
/ 22 ноября 2018

У меня вопрос, как считать слова между фразами в тексте?Например, у меня есть следующий текст:

Элон Маск - технологический предприниматель и инвестор.Он является основателем, генеральным директором и ведущим дизайнером SpaceX.Элон Маск заявил, что цели SpaceX, Tesla и SolarCity вращаются вокруг его видения изменить мир и человечество.

И я хочу посчитать, сколько слов находится между "Элон Маск" и "SpaceX».И вернуть что-то вроде списка с числами, а затем найти среднее расстояние между словами.Например, [15,6].

Я знаю, что в случае слов мы можем разделить текст на слова.Но что делать с фразами?

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Как отметил пользователь Dominique, есть много мелких деталей, которые вы должны учитывать.Я сделал простую программу, которая найдет расстояние двух слов.Вы хотели найти расстояние между "Элон Маск" и "SpaceX".Почему бы просто не найти расстояние между "Musk" и "SpaceX"?

Примечание. В этом примере будет возвращено расстояние между первым появлением слов.В этой программе мы находим расстояние между "Мускус" (2-е слово) и "SpaceX (18-е слово)". Расстояние между составляет 15 слов

ЭлонМаск - технологический предприниматель и инвестор, основатель, генеральный директор и ведущий дизайнер SpaceX. Элон Маск заявил, что цели SpaceX, Tesla и SolarCity вращаются вокруг его видения изменения мира и человечества.

Пример (Python 3):

# Initial sentence
phrase = 'Elon Musk is a technology entrepreneur and investor. He is the founder, CEO, and lead designer of SpaceX. Elon Musk has stated that the goals of SpaceX, Tesla, and SolarCity revolve around his vision to change the world and humanity.'

# Removes common punctuation characters
phrase = ''.join(character for character in phrase if character not in ('!', '.' , ':' , ',', '"')) # Insert punctuation you want removed

# Creates a list of split words
word_list = phrase.split()

# Words you want to find the distance between (word_1 comes first in the sentence, then word_2)
word_1 = 'Musk'
word_2 = 'SpaceX'

# Calculates the distance between word_1 and word_2
distance = (word_list.index(word_2)) - (word_list.index(word_1))

# Prints distance between word_1 and word_2
print('Distance between "' + word_1 + '" and "' + word_2 + '" is ' + str(distance - 1) + ' words.')

Выход:

Расстояние между "Musk" и "SpaceX "составляет 15 слов.

0 голосов
/ 19 января 2019

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

def find_distance(sentence, word1, word2):
    distances = []
    while sentence != "":
        _, _, sentence = sentence.partition(word1)
        text, _, _ = sentence.partition(word2)
        if text != "":
            distances.append(len(text.split()))
    return distances

И если вы вызовете это с вашим предложением, вы получите желаемый результат[15, 6]

print(find_distance(phrase, "Elon Musk", "SpaceX"))

Обратите внимание, что поведение для случая, подобного Elon Musk is a technology Elon Musk entrepreneur ..., должно быть определено.Какой случай вы хотите взять?Первый или второй?

0 голосов
/ 22 ноября 2018

Вы можете разбить свой текст на основе точек, восклицательных знаков и вопросительных знаков, но как ваша программа узнает разницу между точками фраз и точками, обозначающими аббревиатуру?Кроме того, как вы будете иметь дело с скобками?Будут ли они рассматриваться как отдельные фразы или нет?

Я не думаю, что есть прямой ответ на ваш вопрос, если только вы не наложите серьезные ограничения на свои фразы.

...