在Python中确定句子中2个单词之间的接近程度

时间:2015-10-28 10:52:42

标签: python algorithm nltk

我需要确定Python中一个句子中两个单词之间的接近程度。例如,在下面的句子中:

the foo and the bar is foo bar

我想确定单词foobar之间的距离(确定foobar之间出现的单词数量。)

请注意,上述句子中出现多次出现foobar字词会产生不同的距离组合。

此外,单词的顺序不重要。确定这些词之间距离的最佳方法是什么?

以下是我正在使用的代码:

sentence = "the foo and the bar is foo bar"

first_word_to_look = 'foo'
second_word_to_look = 'bar'

first_word = 0
second_word = 0
dist = 0

if first_word_to_look in sentence and second_word_to_look in sentence:

    first_word = len(sentence.split(first_word_to_look)[0].split())
    second_word = len(sentence.split(second_word_to_look)[0].split())

    if first_word < second_word:
        dist = second_word-first_word
    else:
        dist = first_word-second_word

print dist  # distance

上述代码的问题在于它只考虑两个单词的第一次出现。如果同一句子中出现的次数比第一次更接近,则不会考虑它。

确定接近度的最佳方法是什么? python中有没有可以更好地完成这项工作的库?

2 个答案:

答案 0 :(得分:4)

您可以将句子拆分为单词列表,并使用index的{​​{1}}方法:

list

更新以计算所有单词出现次数:

sentence = "the foo and the bar is foo bar"
words = sentence.split()

def get_distance(w1, w2):
     if w1 in words and w2 in words:
          return abs(words.index(w2) - words.index(w1))

答案 1 :(得分:0)

我们也可以使用正则表达式。以下行将返回一个列表 在foo和bar之间发生的单词数

import re
sentence = "the foo and the bar is foo bar"
first_word_to_look = 'foo'
second_word_to_look = 'bar'
word_length = [len(i.split())-2 for i in re.findall(r'foo.*?bar',sentence)]
print word_length