Как найти слова и строки в текстовом файле, чтобы составить их частотный список? - PullRequest
0 голосов
/ 09 июля 2019

Я хочу найти в текстовом файле связные маркеры, которые хранятся в словаре.Я хочу найти их для печати списка частот маркеров, хранящихся в словаре, которые были найдены в этом текстовом файле.Моя программа работает очень хорошо, чтобы найти связные маркеры, которые представляют собой отдельные слова, такие как «но» или «хотя» или «однако», но она не находит, когда связный маркер содержит больше одного токена, такого как «из-за» или «несмотря на'.Я думаю, что это не работает, потому что я токенизировал текст, но если я не токенизировал, программа не считает маркеры.Есть идеи для решения этой проблемы?Код, который я использую ниже:

from collections import defaultdict
import nltk
from nltk.tokenize import word_tokenize
from nltk.tokenize import sent_tokenize,wordpunct_tokenize
import re
import os
import sys
from pathlib import Path

def cohesive_en():

    while True:
        try:
            file_to_open =Path(input("\nPlease, insert your file 
path: "))


            with open(file_to_open,'r', encoding="utf-8") as f:
                words = word_tokenize(f.read())
            with open('/Users/nataliaresende/Dropbox/PoS_Paper_Translationese/cohesive_markers_en.txt','r', encoding="utf-8") as d:
                dic = d.read()
                break
        except FileNotFoundError:
             print("\nFile not found. Better try again")

    matches=[]

    d1=defaultdict(int)

    a=dic.split(',')



    for x in words:
        if x in a:
            matches.append(x)
            d1[x]+=1
        else:
            continue


    for p in sorted(d1, key=d1.get):
        print(p,d1[p])

    print('\n',matches)
    print('\nThere are',len(matches),'cohesive markers in this text file')
    print('\nThere are',len(words),'words in this text file')
    print('\nThe ratio is: ',len(matches)/len(words))

cohesive_en()

Я хочу напечатать все вхождения маркеров в текстовом файле, которые есть в словаре связанных маркеров, включая маркеры, содержащие более 1 токена.Я хочу напечатать что-то вроде:

"Но" 2 "Хотя" 3 "из-за" 2

...