Полный новичок здесь. Следующий код предназначен для анализа тегов p на веб-сайте (с использованием Python) и отображения уровня чтения сайта.
#import both BS4 and the new URLLIB using the added .request
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
#credit to AbigailB (https://stackoverflow.com/users/1798848/abigailb)
def syllables(word):
count = 0
vowels = 'aeiouy'
word = word.lower().strip(".:;?!")
if word[0] in vowels:
count += 1
for index in range(1,len(word)):
if word[index] in vowels and word[index-1] not in vowels:
count += 1
if word.endswith('e'):
count -= 1
if word.endswith('le'):
count+=1
if count == 0:
count += 1
return count
#site prompt, to be replaced by active tab browser address
#site = input("Enter the website to find out its reading level:")
#my_url = "{}".format(site)
#default site for testing
my_url = "https://en.wikipedia.org/wiki/Jane_Austen"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
#empty variables to be pushed w/ extracted, looped text
senNum = []
wordNum = []
syllNum = []
page_soup = soup(page_html, "html.parser")
page_soup.findAll("p")
paragraphs = page_soup.findAll("p")
#loop through every paragraph, do magic
for para in paragraphs:
para = para.text.strip()
paraSen = int(len(para.split('.')) - 1)
paraWord = int(len(para.split()))
paraSyll = syllables(para)
intParaSen = int(paraSen)
intParaWord = int(paraWord)
intParaSyll = int(paraSyll)
#append stripped values into empty variables
senNum.append(intParaSen)
wordNum.append(intParaWord)
syllNum.append(intParaSyll)
#sums of all previously empty values
sumSenNum = sum(senNum)
sumWordNum = sum(wordNum)
sumSyllNum = sum(syllNum)
#averages for Flesch–Kincaid ease
avgWordsPerSen = sumWordNum/sumSenNum
avgSyllPerWord = sumSyllNum/sumWordNum
#final parts for Flesch–Kincaid ease
calcOne = avgWordsPerSen * 0.39
calcTwo = avgSyllPerWord * 11.8
finalCalc = calcOne + calcTwo - 15.59
print(finalCalc)
Это сильно зависит от фрагмента кода, который я обнаружил, помеченного выше как слогов def (слово) (кредит найден выше), который отображает количество слогов в строке. Он работает на некоторых сайтах, но когда я запускаю код на других, я получаю следующую ошибку:
Traceback (most recent call last):
File "C:\Users\Waves\Desktop\gradeLevel.py", line 48, in <module>
paraSyll = syllables(para)
File "C:\Users\Waves\Desktop\gradeLevel.py", line 10, in syllables
if word[0] in vowels:
IndexError: string index out of range
Из того, что я понимаю, это может иметь какое-то отношение к тому, что [0] является первым объектом в массиве, тогда как я полагаю, что первоначальный автор имел в виду, что он подразумевает "Если разделителей гласных нет ...", но я Я не уверен. Пожалуйста, не стесняйтесь присоединяться к любой не связанной критике кода, который у вас может быть. Заранее спасибо!