1
votes

Comment extraire des lignes limitées de données à partir d'un mot clé spécifique à l'aide de python

J'ai un fichier texte dans lequel j'ai besoin d'extraire les cinq premières lignes de celles où un mot-clé spécifié apparaît dans le paragraphe.

Je suis capable de trouver des mots-clés mais je ne peux pas écrire les cinq prochaines lignes de ce mot-clé.

mylines = []                              

with open ('D:\\Tasks\\Task_20\\txt\\CV (4).txt', 'rt') as myfile:  

    for line in myfile:                   

        mylines.append(line)             

    for element in mylines:               

        print(element, end='')  

print(mylines[0].find("P"))

S'il vous plaît aider si quelqu'un a une idée sur la façon de le faire.

Exemple de fichier texte d'entrée: -

Agence partenaire philippine: ALL POWER STAFFING SOLUTIONS, INC.

Objectifs de la formation:: Avoir une exposition culturelle internationale et une expérience pratique dans le domaine de la gestion hôtelière comme une passerelle vers une carrière hôtelière significative. Pour développer mon hospitalité compétences en gestion et devenir compétitif à l’échelle mondiale.

Éducation Nom de l'institution: SOUTHVILLE FOREIGN UNIVERSITY - PHILIPPINES Lieu Hom as Pinas City, Philippine Institution date de début: (juin 2007

Résultat requis: -

Objectifs de la formation:: Avoir une exposition culturelle internationale et une expérience pratique dans le domaine de la gestion hôtelière comme une passerelle vers une carrière hôtelière significative. Pour développer mon hospitalité compétences en gestion et devenir compétitif à l’échelle mondiale.

#

Je dois rechercher le mot-clé d'objectif de formation dans un fichier texte et ceux qu'il trouve qu'il ne devrait écrire que les 5 prochaines lignes.


0 commentaires

3 Réponses :


0
votes

Essayez ceci:

list = ["hello","there","blink"]    //insert your words here
index = []
for i, line in enumerate(content):
    for items in list:
        if items in line:
            index.append(i)
print(index)

Si vous n'avez que quelques mots (juste pour obtenir l'index):

index = []
for i, line in enumerate(content):
    if 'hello' in line or 'there' in line:     //add your or + word here
        index.append(i)
print(index)

Si vous avez beaucoup (juste pour obtenir l'index):

with open('test.txt') as f:
    content = f.readlines()
index = [x for x in range(len(content)) if 'training objectives' in content[x].lower()]
for num in index:
    for lines in content[num:num+5]:
        print (lines)


3 commentaires

Je suis sûr qu'il existe un moyen plus court, mais pour celui-ci, j'obtiens l'index des lignes avec ces mots-clés et les imprime avec les lignes supplémentaires dont vous avez besoin.


cela fonctionne bien avec un seul mot-clé.Je veux donner plusieurs mots-clés et après avoir trouvé chaque mot-clé, il devrait écrire les cinq lignes suivantes ...


Consultez mes modifications. J'espère que vous pourrez comprendre le concept et faire des modifications comme vous le souhaitez.



0
votes

Cela dépend de l’endroit où vous vous trouvez, mais j’ai mis une expression régulière qui pourrait vous aider avec un exemple de l’aspect de mon texte dans la variable st:

In [254]: st                                                                                  

Out[254]: 'Philippine Partner Agency: ALL POWER STAFFING SOLUTIONS, INC.\n\nTraining Objectives::\nTo have international cultural exposure and hands-on experience \nin the field of hospitality management as a gateway to a meaningful hospitality career. \nTo develop my hospitality management skills and become globally competitive.\n\n\nEducation Institution Name: SOUTHVILLE FOREIGN UNIVERSITY - PHILIPPINES Location Hom as Pinas City, Philippine Institution start date: (June 2007\n'

impore re

re.findall('Training Objectives:.*\n((?:.*\n){1,5})', st)   

Out[255]: ['To have international cultural exposure and hands-on experience \nin the field of hospitality management as a gateway to a meaningful hospitality career. \nTo develop my hospitality management skills and become globally competitive.\n\n\n']


0 commentaires

1
votes

Si vous essayez simplement d'extraire l'intégralité du bloc "Objectifs de formation", recherchez le mot-clé et continuez à ajouter des lignes jusqu'à ce que vous atteigniez une ligne vide (ou un autre marqueur approprié, l'en-tête suivant par exemple).

(modifié pour gérer plusieurs fichiers et mots-clés)

def extract_block(filename, keywords):
    mylines = []
    with open(filename) as myfile:
        save_flag = False
        for line in myfile:
            if any(line.startswith(kw) for kw in keywords):
                save_flag = True
            elif line.strip() == '':
                save_flag = False
            if save_flag:
                mylines.append(line)
    return mylines

filenames = ['file1.txt', 'file2.txt', 'file3.txt']
keywords = ['keyword1', 'keyword2', 'keyword3']
for filename in filenames:
    block = extract_block(filename, keywords)

Cela suppose qu'il n'y a qu'un seul bloc que vous voulez dans chaque fichier. Si vous extrayez plusieurs blocs de chaque fichier, cela deviendrait plus compliqué.

Si vous voulez vraiment 5 lignes, toujours et à chaque fois, alors vous pouvez faire quelque chose de similaire mais ajouter un compteur pour compter votre 5 lignes.


2 commentaires

hé, j'ai plusieurs fichiers texte qui ont des mots-clés différents, alors dites-moi comment lire tous les fichiers texte et sur la base de plusieurs mots-clés, quel que soit celui présent dans ce fichier, extrayez le passage.


@Ani J'ai mis à jour ma réponse pour gérer plusieurs fichiers et mots-clés.