এই ফাংশনটি হ্যাকলবেরি ফিনের পুরো পাঠ্যকে প্রায় 0.1 সেকেন্ডের মধ্যে বাক্যে বিভক্ত করতে পারে এবং অনেক বেদনাদায়ক প্রান্তের কেসকে পরিচালনা করে যা বাক্যটিকে পার্থক্যহীন উদাহরণ হিসাবে দেখায় যেমন " মিঃ জন জনসন জুনিয়র মার্কিন যুক্তরাষ্ট্রে জন্মগ্রহণ করেছিলেন তবে তার পিএইচএইচ অর্জন করেছিলেন। ইঞ্জিনিয়ার হিসাবে নাইকে ইনক। এ যোগদানের আগে ইস্রায়েলে ডি। তিনি ব্যবসা বিশ্লেষক হিসাবে ক্রেগলিস্ট.আর.এও কাজ করেছিলেন। "
import re
alphabets= "([A-Za-z])"
prefixes = "(Mr|St|Mrs|Ms|Dr)[.]"
suffixes = "(Inc|Ltd|Jr|Sr|Co)"
starters = "(Mr|Mrs|Ms|Dr|He\s|She\s|It\s|They\s|Their\s|Our\s|We\s|But\s|However\s|That\s|This\s|Wherever)"
acronyms = "([A-Z][.][A-Z][.](?:[A-Z][.])?)"
websites = "[.](com|net|org|io|gov)"
def split_into_sentences(text):
text = " " + text + " "
text = text.replace("\n"," ")
text = re.sub(prefixes,"\\1<prd>",text)
text = re.sub(websites,"<prd>\\1",text)
if "Ph.D" in text: text = text.replace("Ph.D.","Ph<prd>D<prd>")
text = re.sub("\s" + alphabets + "[.] "," \\1<prd> ",text)
text = re.sub(acronyms+" "+starters,"\\1<stop> \\2",text)
text = re.sub(alphabets + "[.]" + alphabets + "[.]" + alphabets + "[.]","\\1<prd>\\2<prd>\\3<prd>",text)
text = re.sub(alphabets + "[.]" + alphabets + "[.]","\\1<prd>\\2<prd>",text)
text = re.sub(" "+suffixes+"[.] "+starters," \\1<stop> \\2",text)
text = re.sub(" "+suffixes+"[.]"," \\1<prd>",text)
text = re.sub(" " + alphabets + "[.]"," \\1<prd>",text)
if "”" in text: text = text.replace(".”","”.")
if "\"" in text: text = text.replace(".\"","\".")
if "!" in text: text = text.replace("!\"","\"!")
if "?" in text: text = text.replace("?\"","\"?")
text = text.replace(".",".<stop>")
text = text.replace("?","?<stop>")
text = text.replace("!","!<stop>")
text = text.replace("<prd>",".")
sentences = text.split("<stop>")
sentences = sentences[:-1]
sentences = [s.strip() for s in sentences]
return sentences