2012-05-08 4 views
3

Description du problème: Je m'intéresse aux termes de la fenêtre de texte, disons 3 mots à gauche et 3 à droite. Le cas de base a la forme de w-3 w-2 w-1 terme w + 1 w + 2 w + 3. Je veux mettre en place une fenêtre glissante sur mon texte avec laquelle je pourrai enregistrer les mots de contexte de chaque terme. Ainsi, chaque mot est traité comme un terme, mais lorsque la fenêtre se déplace, il devient un mot contextuel, etc. Cependant, lorsque le terme est le 1er mot de la ligne, il n'y a pas de mots contextuels sur la gauche (t w + 1 w + 2 w + 3), quand c'est le 2ème mot en ligne, il n'y a qu'un seul mot de contexte sur la gauche, et ainsi de suite. Donc, je suis intéressé par des conseils pour implémenter cette fenêtre coulissante flexible (en Python) sans écrire et spécifier séparément chaque situation possible.Fenêtre coulissante flexible (en Python)

Pour récapituler:

Exemple d'entrée:

[ "w1", "w2", "w3", "W4", "W5", "W6", "W7", "W8", "w9", "w10"]

sortie:

t1 w2 w3 w4

w1 t2 w3 w4 w5

w1 w2 t3 w4 w5 w6

w1 w2 w3 t4 w5 w6 w7

__ w2 w3 w4 t5 W6 W7 W8

__ __ etc.

Mon plan actuel est de mettre en œuvre ce avec une condition distincte pour chaque ligne de la sortie.

+1

n'est pas lié à droite? –

+0

Votre autre à gauche. – JoeFish

+0

Nous devons aller de l'avant, pas en arrière! En haut, pas en avant! Et toujours, toujours virevoltant! –

Répondre

5

Si vous souhaitez une fenêtre glissante de n mots, utilisez une file d'attente à double extrémité de longueur maximale n pour implémenter un tampon.

Cela devrait illustrer le concept:

mystr = "StackOverflow"  
from collections import deque  
window = deque(maxlen=5) 
for char in mystr: 
    window.append(char) 
    print (''.join(list(window))) 

Sortie:

S 
St 
Sta 
Stac 
Stack 
tackO 
ackOv 
ckOve 
kOver 
Overf 
verfl 
erflo 
rflow 
+0

Notez que l'argument [maxlen arg] (http://docs.python.org/library/collections.html#collections.deque.maxlen) a été introduit dans python 2.7 – jrennie

+0

Merci, Li-aung, c'était utile pour moi. Je suis en train d'enregistrer des contextes d'un terme avec deque courir depuis le début et la fin du fichier. Ce dont j'avais besoin, c'est de la flexibilité de Deque pour stocker une longueur maximale d'éléments mais peut-être aussi moins. – sim

Questions connexes