पाठ फ़ाइल को टुकड़ों में विभाजित करना, फिर उन वर्गों में मुख्य वाक्यांश खोजना - पायथन, शब्दकोश, विभाजन, पुनरावृत्ति, नियंत्रण-संरचना

मैं पाइथन के लिए नया हूं और मैं पहले से ही भाषा का प्रशंसक हूं। मेरे पास एक प्रोग्राम है जो निम्न कार्य करता है:

  1. एक टेक्स्ट फ़ाइल खोलता है जिसमें तारों से अलग पाठ के अनुभाग होते हैं (***)

  2. उपयोग करता है split() इस पाठ फ़ाइल को इन तारों से अलग वर्गों में विभाजित करने के लिए कार्य करें। तारों की रेखा टेक्स्ट फ़ाइल में एक समान है।

  3. मैं चाहता हूं कि मेरा कोड इन अनुभागों में से प्रत्येक के माध्यम से पुन: प्रयास करें और निम्न कार्य करें:

    • मेरे पास मूल्यों को सौंपा गया "कुंजी वाक्यांश" वाला शब्दकोश है। शब्दकोश में प्रत्येक कुंजी का मूल्य है 0

    • कोड को प्रत्येक खंड के माध्यम से पुनरावृत्त करने की आवश्यकता हैविभाजन से बनाया गया है और यह देखने के लिए जांचें कि प्रत्येक अनुभाग में शब्दकोश में कुंजी मिलती है या नहीं। यदि कोई महत्वपूर्ण शब्द पाया जाता है, तो उस कुंजी का मान 1 से बढ़ता है।

    • एक बार कोड एक सेक्शन के माध्यम से पुनरावृत्त हो जाता है औरइस बात की गिनती हुई है कि अनुभाग में कितनी कुंजी हैं और तदनुसार मूल्यों को जोड़ा गया है, इसे उस सेटिंग के लिए शब्दकोश कुंजी और गणना (मान) मुद्रित करना चाहिए, मानों को 0 पर सेट करें, और # से शुरू होने वाले पाठ के अगले भाग पर जाएं 3 फिर से।

मेरा कोड है:

    from bs4 import BeautifulSoup
import re
import time
import random
import glob, os
import string


termz = {"does not exceed" : 0, "shall not exceed" : 0, "not exceeding" : 0,
"do not exceed" : 0, "not to exceed" : 0, "shall at no time exceed" : 0,
"shall not be less than" : 0, "not less than" : 0}
with open("Q:/hello/place/textfile.txt", "r") as f:
sections = f.read().split("**************************************************")
for p in sections[1:]:
for eachKey in termz.keys():
if eachKey in p:
termz[eachKey] = termz.get(eachKey) + 1
print(termz)


#print(len(sections))  #there are thirty sections

#should be if code encounters ***** then it resets the counters and just moves on....
#so far only can count the phrases over the entire text file....

#GO BACK TO .SPLIT()
# termz = dict.fromkeys(termz,0) #resets the counter

यह बताता है कि यह क्या मायने रखता है लेकिन यह पहली, आखिरी, या यहां तक ​​कि पूरी फाइल भी नहीं है - यह नहीं जानता कि यह क्या कर रहा है।

अंत में प्रिंट स्टेटमेंट जगह से बाहर है। termz = dict.fromkeys(termz,0) लाइन एक तरीका है जिसे मैंने मानों को रीसेट करने के लिए पाया है0 से शब्दकोश, लेकिन टिप्पणी की गई है क्योंकि मुझे यकीन नहीं है कि इस तक कैसे पहुंचे। अनिवार्य रूप से, पाइथन नियंत्रण संरचनाओं के साथ संघर्ष करना। अगर कोई मुझे सही दिशा में इंगित कर सकता है, तो यह "अद्भुत हो।

उत्तर:

जवाब के लिए 2 № 1

आपका कोड बहुत करीब है। नीचे दी गई टिप्पणियां देखें:

termz = {
"does not exceed": 0,
"shall not exceed": 0,
"not exceeding": 0,
"do not exceed": 0,
"not to exceed": 0,
"shall at no time exceed": 0,
"shall not be less than": 0,
"not less than": 0
}

with open("Q:/hello/place/textfile.txt", "r") as f:
sections = f.read().split("**************************************************")

# Skip the first section. (I assume this is on purpose?)
for p in sections[1:]:
for eachKey in termz:
if eachKey in p:
# This is simpler than termz[eachKey] = termz.get(eachKey) + 1
termz[eachKey] += 1

# Move this outside of the inner loop
print(termz)

# After printing the results for that section, reset the counts
termz = dict.fromkeys(termz, 0)

संपादित करें

नमूना इनपुट और आउटपुट:

input = """
Section 1:

This section is ignored.
does not exceed
**************************************************
Section 2:

shall not exceed
not to exceed
**************************************************
Section 3:

not less than"""

termz = {
"does not exceed": 0,
"shall not exceed": 0,
"not exceeding": 0,
"do not exceed": 0,
"not to exceed": 0,
"shall at no time exceed": 0,
"shall not be less than": 0,
"not less than": 0
}

sections = input.split("**************************************************")

# Skip the first section. (I assume this is on purpose?)
for p in sections[1:]:
for eachKey in termz:
if eachKey in p:
# This is simpler than termz[eachKey] = termz.get(eachKey) + 1
termz[eachKey] += 1

# Move this outside of the inner loop
print(termz)

# After printing the results for that section, reset the counts
termz = dict.fromkeys(termz, 0)

# OUTPUT:
# {"not exceeding": 0, "shall not exceed": 1, "not less than": 0, "shall not be less than": 0, "shall at no time exceed": 0, "not to exceed": 1, "do not exceed": 0, "does not exceed": 0}
# {"not exceeding": 0, "shall not exceed": 0, "not less than": 1, "shall not be less than": 0, "shall at no time exceed": 0, "not to exceed": 0, "do not exceed": 0, "does not exceed": 0}

जवाब के लिए 0 № 2
if eachKey in p:
termz[eachKey] += 1  # might do it
print(termz)

संबंधित सवाल
सबसे लोकप्रिय