Как создать вектор соседних слов?

#python

#питон

Вопрос:

Я работаю над программой НЛП. Я хочу создать вектор для каждого слова, чтобы показать его четыре окружающих соседа как можно дальше. Например, у нас есть предложение: I go to school every day . Вектор для word school выглядит следующим образом: V = [go, to, every, day] . Это было простое условие, и я в состоянии его выполнить. Но когда дело доходит до слов, расположенных в начале или в конце предложения, это не дает мне желаемых результатов. Например, для word I вектор должен быть таким: V=[0,0,go,to] но вывод такой: [go,to] или для word go вектор должен быть: [0,I,to,school] . Кто-нибудь может помочь мне с этой проблемой?

 xx=[contains some words]
for text in sentences:
        text = text.lower().split()
        for i in range(len(text)):
            token = text[i]
            if(token not in xx):

                n1 = text[i-2 : i]
                n2 = text[i 1: i 1 window_size]
                print(n1,n2,n1 n2)
 

Ответ №1:

Надеюсь, это поможет, я просто проверяю, достаточно ли у меня слов слева и справа!

 def get_surrounding(sentence='', word='', window_size=4):
    l,r=sentence.split(word)[:2]
    l=l.strip().split()[-window_size//2:]
    r=r.strip().split()[:window_size//2]
    l=['0']*(window_size//2-len(l)) l
    r=r ['0']*(window_size//2-len(r))
    return l r
s = 'I go to school every day'
print(get_surrounding(sentence=s, word='I', window_size=4))
print(get_surrounding(sentence=s, word='go', window_size=4))
print(get_surrounding(sentence=s, word='to', window_size=4))
print(get_surrounding(sentence=s, word='school', window_size=4))
print(get_surrounding(sentence=s, word='every', window_size=4))
print(get_surrounding(sentence=s, word='day', window_size=4))
 
 ['0', '0', 'go', 'to']
['0', 'I', 'to', 'school']
['I', 'go', 'school', 'every']
['go', 'to', 'every', 'day']
['to', 'school', 'day', '0']
['school', 'every', '0', '0']
 

Комментарии:

1. Я очень благодарен вам. это решило мою проблему.

Ответ №2:

Вы всегда можете предварительно обработать данные в соответствии с вашими потребностями.

 sentence = 'i go to school every day'

def get_neighbors(sentence, num_neighbors):
    # Preprocess sentence and fill margins with defaults
    default = 0
    words = [word.strip() for word in sentence.split(' ')]
    total_words = len(words)
    margin = num_neighbors // 2
    for x in range(margin):
        words.insert(0, default)
        words.append(default)

    ans = []
    for i, word in enumerate(words[2:-2]):
        i  = margin
        neighbours = [words[i-2], words[i-1], words[i 1], words[i 2]]
        ans.append(neighbours)
    return ans


if __name__ == '__main__':
    print(sentence)
    print(get_neighbors(sentence, 4))

user@Inspiron:~/code/general$ python get_neighbors.py 
i go to school every day
[[0, 0, 'go', 'to'], [0, 'i', 'to', 'school'], ['i', 'go', 'school', 'every'], ['go', 'to', 'every', 'day'], ['to', 'school', 'day', 0], ['school', 'every', 0, 0]]
user@Inspiron:~/code/general$ 



 

Комментарии:

1. Спасибо вам за ваш полный ответ. этот код очень полезен для моей проблемы. Спасибо