Как подсчитать количество строк в файле tsv, которые заканчиваются строкой специфицированной c? - PullRequest
0 голосов
/ 08 июля 2020

У меня есть файл tsv с двумя столбцами, разделенными табуляцией. Первый столбец - это столбец предложений, а второй столбец метки. Я хочу подсчитать количество предложений, которые являются положительными, отрицательными или нейтральными в файле, когда я его прочитал и l oop внутри него. Я придумал этот небольшой код, но он не работает? Как его улучшить?


tsv = ['jdmfreins', 'jdmconditions', 'jdmne', 'jdmmotivations']

for s in tsv:
    
    c_pos = 0
    c_neu = 0
    c_neg = 0
    
    path = os.path.join(fileDir, '/mnt/c/Users/Emmanuelle/Documents/Extraction_corpus/fichier_sorti_tsv', s + '.tsv')
    with open(path, 'r', encoding='utf-8') as l_1:
        next(l_1)
        print(s, '\n ')
        l_1 = [line.rstrip() for line in l_1]
        for line in l_1:
            print(line)
            if line.strip().endswith('positif'):
                c_pos =+ 1
            elif line.strip().endswith('neutre'):
                c_neu =+ 1
            else:
                c_neg =+ 1

    print('nombre positif :', c_pos)
    print('nombre négatif :', c_neg)
    print('nombre neutre :', c_neu, '\n')

Файл выглядит так:

"""""""J'avais adoré les deux premières, mais celui-ci n'est pas du tout à la hauteur."""   positif
Peter Criss et Ace Frehley trouvent davantage leur place dans le travail de composition et au chant (Hooligan / Shock Me) face à l'omniprésence de la paire Stanley/Simmons mais les tensions internes existent et conduiront aux 4 albums solos de 1978... positif
Le contexte est certes bien rendu, mais les rapports entre les héros sont exécrables.   positif
Le sujet aurait pu faire un bon vaudeville avec un tant soit peu d'humour et de finesse, mais, la plus belle femme du monde ne peut donner que ce qu'elle a !!! positif
arnold est mauvais, il fait des blagues pas marrantes le mechant est simplement le meme que dans le 2 mais en plus balezes, nick stahl est mauvais : pour finir c'est pitoyable de voir ce que peut faire hollywood pour du fric!   neutre
Oui mais... Excusez moi mais même si les sketch me font rire séparément, essayer de tous les avaler en une soirée, c'est comme essayer de manger des kilos de foie gras en un repas.    neutre
Au risque de ne pas brosser la majorité dans le sens du poil, je vais donner un avis honnête, qui n'engage que moi mais qui est tellement différent de ceux que j'avais pu lire qu'il peut être utile à certains.   positif
(oubliez les compils recentes qui n'ont de compils que le nom,mais n'ont pas oublié au passage le coté biseness négatif
Début long avant d'etre pris par un peu de suspens devant un personnage que l'on pense interessant ( psychothérapeute tueur !)mais elle nous amène vers d'autres personnages s'étendant sur leur séjour, leur rencontre que l'on s'imagine utile pour la fin mais il n'en est rien!!    neutre
La charge est un peu cruelle, mais l’unicité du style des DA de Miyasaki finit par me lasser.   positif
Bon et bien le premier n'était déjas pas une révélation du cinéma mais là on frise le délit d'abut de confience.    positif
Peut être suis-je excessif dans mes propos, mais je crois qu'ils sont à la mesure de ma déception.  positif
"""presque cristalline chante pour 2 minutes de Bonheur auditif après tant de déception: Pourquoi ne se lancerait elle pas plutôt dans l'opéra et le répertoire classique revisité???ses nouvelles fréquentations lui font probablement du bien au cœur mais feraient mieux de changer de métier et arrêter de pervertir son talent si mal exploité"""""""  neutre

и ответ:

nombre positif : 0
nombre négatif : 0
nombre neutre : 1

Я тоже пробовал: if line. split ('\ t') == 'positif': но тот же ответ

1 Ответ

1 голос
/ 08 июля 2020

Вы можете использовать Counter из модуля collections:

from collections import Counter
 
with open('file.txt','r') as f:
    lines = f.read().splitlines()

count = Counter([l.split()[-1] for l in lines])

print(count)

Вывод:

Counter({'positif': 8, 'neutre': 4, 'négatif': 1})

Если вы хотите получить результаты в словаре:

print(dict(count))

Вывод:

{'positif': 8, 'neutre': 4, 'négatif': 1}

Разрушение. Эта часть:

with open('file.txt','r') as f:
    lines = f.read().splitlines()

назначит все строки в file.txt списку с именем lines. О новых строках уже позаботился read().splitlines(). Эта часть:

[l.split()[-1] for l in lines]

- это понимание списка, в котором будут перечислены все последние слова из строк в lines, где str.split() вернет список строк, разделенных пробелом, и [-1] означает последний элемент списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...