2016-11-15 2 views
1

Donc, en essayant de chercher pour voir si chacune des lignes dans un fichier2.txt contient l'un des mots dans le fichier 1 txt 1. donc, si par exemple:problème avec l'analyse des mots dans un fichier et en vérifiant s'ils sont dans chaque ligne d'un autre fichier & ... en python

fichier 1:

love,10 
like,5 
best,10 
hate,1 
lol,10 
better,10 
worst,1 

fichier 2: un tas de phrases que je veux voir si elle contient l'une des fichier1 (plus de 200 lignes)

I avoir un moyen de le faire avec mes propres fichiers dans mon programme, et cela fonctionne, mais il ajoute les valeurs totales dans un grand li st (comme si le fichier entier dit aimer 43 fois, puis Love: 43, mais je cherche des listes séparées pour chaque ligne .. donc si une ligne contient l'amour 4 fois et l'autre 5 fois alors le programme l'indiquera .. ** spécifiquement, ce que j'essaye de faire est de totaliser le nombre de mots-clés dans chaque ligne du fichier (donc si une ligne contient 4 mots-clés alors le total pour cette ligne est 4, et la valeur associée aux mots-clés voir comment dans mon exemple, il y a une valeur associée aux mots-clés? Si une ligne dans un fichier est: Hi I love my boyfriend but I like my bestfriend lol alors cela comme serait {Love: 1, like: , lol:1}(keywords = 3, Total = 25 (le total provient des valeurs qui leur sont associées dans la liste)

et si une deuxième ligne est tout simplement

I hate my life. It is the worst day ever! 

alors ce serait être {hate: 1, worst: 1}(keywords = 2, total = 2

J'ai cela, et il fonctionne, mais est-il un moyen de le modifier si au lieu d'imprimer une grande ligne comme:

{'please': 24, 'worst': 40, 'regrets': 1, 'hate': 70,... etc,} it simply adds the total number of keywords per line and the values associated with them? 

wordcount = {} 
with open('mainWords.txt', 'r') as f1, open('sentences.txt', 'r') as f2: 
    words = f1.read().split() 
    wordcount = { word.split(',')[0] : 0 for word in words} 

    for line in f2: 
     line_split = line.split() 
     for word in line_split: 
      if word in wordcount: 
      wordcount[word] += 1 

print(wordcount) 

Répondre

1

Comme d'habitude, collections sauver la journée:

from collections import Counter 

with open('mainWords.txt') as f: 
    sentiments = {word: int(value) 
       for word, value in 
       (line.split(",") for line in f) 
       } 

with open('sentences.txt') as f: 
    for line in f: 
     values = Counter(word for word in line.split() if word in sentiments) 
     print(values) 
     print(sum(values[word]*sentiments[word] for word in values)) # total 
     print(len(values)) # keywords 

Vous avez les polarités de sentiment dans le dictionnaire sentiments pour une utilisation ultérieure. Avant de l'essayer et de modifier mon code, cette méthode calcule-t-elle le nombre de mots-clés dans chaque ligne individuellement?

+0

(comme si un semblable a 4 mots-clés alors le total est 4) – HelloWorld4382

+0

Pour chaque ligne, il imprime un dictionnaire de mot pertinent et sa fréquence. Donc pour "J'aime juste aimer ce nouveau film, c'est le meilleur", il sortirait "{'love': 3, 'best': 1}'. Je viens de comprendre ce que vous entendez par "total" et "mots-clés", donnez-moi une minute. – L3viathan

+0

@ HelloWorld4382 J'ai ajouté comment obtenir le total et la quantité de mots-clés dans les deux derniers appels à 'print'. – L3viathan