#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. Спасибо вам за ваш полный ответ. этот код очень полезен для моей проблемы. Спасибо