Пример #1
0
 def __init__(self) -> None:
     self.SMS_KEYBOARD = {
         "A": 2,
         "B": 2,
         "C": 2,
         "D": 3,
         "E": 3,
         "F": 3,
         "G": 4,
         "H": 4,
         "I": 4,
         "J": 5,
         "K": 5,
         "L": 5,
         "M": 6,
         "N": 6,
         "O": 6,
         "P": 7,
         "Q": 7,
         "R": 7,
         "S": 7,
         "T": 8,
         "U": 8,
         "V": 8,
         "W": 9,
         "X": 9,
         "Y": 9,
         "Z": 9,
         "-": 0
     }
     self.SMS_KEYS = invert_dict(self.SMS_KEYBOARD)
     self.wb = Woordenboek()
Пример #2
0
class StringWordAnalyser(object):
    def __init__(self, value="") -> None:
        self.wb = Woordenboek()
        self.sample = value

    def all_words(self, value) -> bool:
        self.sample = value
        try:
            self.__all_words()
        except NotFound:
            _("Sample was not a sentence")
            return False
        except Found as f:
            _("Found: ", f.value)
            return True

    def __all_words(self, value=None):
        if value:
            ret = value
        else:
            ret = self.sample

        for idx in range(len(ret), 1, -1):
            wrd = ret[0:idx]
            if self.wb.is_word(wrd):
                _(wrd)
                new_wrd = ret[idx:]
                if len(new_wrd) == 0:
                    _(self.sample)
                    raise Found(self.sample)
                self.__all_words(new_wrd)
            else:
                _(idx, wrd)
                if idx == 2:
                    raise NotFound()
Пример #3
0
 def __init__(self, value="") -> None:
     self.wb = Woordenboek()
     self.sample = value
Пример #4
0
voorbeeld:

HALLOWERELDWIJZIJNMENSENMETHETGROTEGELUK

het eerste woord dat je mogelijk vind is HA, maar ook HAL en HALLO voordat je geen woord meer kan vinden
Stel jdat je met het langste woord begint dan kan je opnieuw beginnen op met HALLO er van af gehaald, maar je
hebt ook de woorden (HA, HAL) bewaard. nu begin je opnieuw op de positie na HALLO. we vinden dan bijvoorbeeld
(WE, en WERELD) begin weer bij het langste woord en ga zo door. 
Stel dat het na WERELD faalt (geen woorden meer) dan val je terug op WE en ga je weer verder totdat alles faalt
en dan kan je nog terug vallen op HAL en weer opnieuw beginnen en HA etc.
Het enige gelukkige pad is als alle 40 karakters gebruikt zijn in woorden.

"""

WB = Woordenboek()


class NotFound(Exception):
    pass


class Found(Exception):
    def __init__(self, msg) -> None:
        self.value = msg


class StringWordAnalyser(object):
    def __init__(self, value="") -> None:
        self.wb = Woordenboek()
        self.sample = value
Пример #5
0
def woordenboek():
    return Woordenboek()
Пример #6
0
class Sms(object):
    """SMS class for translating words to sms numbers or vise versa"""
    def __init__(self) -> None:
        self.SMS_KEYBOARD = {
            "A": 2,
            "B": 2,
            "C": 2,
            "D": 3,
            "E": 3,
            "F": 3,
            "G": 4,
            "H": 4,
            "I": 4,
            "J": 5,
            "K": 5,
            "L": 5,
            "M": 6,
            "N": 6,
            "O": 6,
            "P": 7,
            "Q": 7,
            "R": 7,
            "S": 7,
            "T": 8,
            "U": 8,
            "V": 8,
            "W": 9,
            "X": 9,
            "Y": 9,
            "Z": 9,
            "-": 0
        }
        self.SMS_KEYS = invert_dict(self.SMS_KEYBOARD)
        self.wb = Woordenboek()

    def word_2_sms(self, word) -> str:
        """Translates a word to an sms number"""
        return ''.join([str(self.SMS_KEYBOARD[x]) for x in word.upper()])

    def sms_2_word(self, number) -> list:
        """Gestimate of the possible words based on the T9 number code of an sms

        The gestimate is based on the Woordenboek dictionary so actually quite accurate.
        """
        perms = [
            ''.join(item) for item in itertools.product(
                *[self.SMS_KEYS[int(x)] for x in str(number)])
        ]
        words = [wrd for wrd in perms if self.wb.is_word(wrd)]
        return words

    def txt_2_sms(self, txt) -> str:
        """
# Text 2 SMS keyboard code

This function translates text to the sms key code equivalent. (T9 keyboard)
        """
        words = txt.split(" ")
        return ' '.join([self.word_2_sms(x.strip()) for x in words])

    def sms_2_txt(self, sms) -> str:
        """
# SMS to Text

This function tries to translate sms key code back to text. This is more difficult a T9 keyboard can have multiple letters
assigned to 1 key, so a dictionary is used to find viable words.

Currently only the Dutch language is supported.

The returned string is a string with per word all the possible solutions in there, so some "manual" decryption might
still be needed.
        """
        numbers = sms.split(" ")
        words = [self.sms_2_word(x) for x in numbers]
        ret = ""
        for wrd in words:
            if len(wrd) == 1:
                ret += wrd[0]
            else:
                ret += "/".join(wrd)
            ret += " "
        return ret
 def setUp(self):
     self.wb = Woordenboek()
class TestWoordenboek(TestCase):
    def setUp(self):
        self.wb = Woordenboek()

    def test_is_woord(self):
        self.assertTrue(self.wb.is_word("regen"))
        self.assertTrue(self.wb.is_word("aalsmeerder"))

    def test_anagram(self):
        self.assertEqual(['SERVISCH', 'VISSCHER'], self.wb.anagram("servisch"))
        self.assertEqual(['SERVISCH', 'VISSCHER'], self.wb.anagram("servisch"))
        anagram = self.wb.anagram("SHOTSCOLA")  # rits SCHOTS en COLA naar SCHOOLTAS of zoek het gewoon op :-)
        anagram.sort()
        self.assertListEqual(['SCHOOLTAS', 'SHOTSCOLA'], anagram)

    def test_ends_with(self):
        self.assertEqual(['DOCTOR', 'EREDOCTOR', 'SPINDOCTOR'], self.wb.ends_with("DOCTOR"))

    def test_starts_with(self):
        self.assertEqual(
            ['HETER', 'CATHETER', 'KATHETER', 'BALLONKATHETER', 'BLAASKATHETER', 'URINEKATHETER', 'MAAGKATHETER'],
            self.wb.ends_with("HETER"))

    def test_contains(self):
        self.assertEqual(
            ['LIEFDE', 'BLIEFDE', 'KLIEFDE', 'LIEFDEN', 'LIEFDES', 'BELIEFDE', 'BLIEFDEN', 'GELIEFDE', 'KLIEFDEN',
             'VERLIEFDE', 'APENLIEFDE', 'BOEKENLIEFDE', 'BROEDERLIEFDE', 'CLUBLIEFDE', 'DIERENLIEFDE', 'EIGENLIEFDE',
             'EX-GELIEFDE', 'FILMLIEFDE', 'GESLACHTSLIEFDE', 'HAAT-LIEFDEVERHOUDING', 'HERENLIEFDE', 'JEUGDLIEFDE',
             'JONGENSLIEFDE', 'KALVERLIEFDE', 'KINDERLIEFDE', 'KNAPENLIEFDE', 'LIEFDEBAND', 'LIEFDEBETREKKING',
             'LIEFDEBETUIGING', 'LIEFDEBEURT', 'LIEFDEBLIJK', 'LIEFDEBRIEF', 'LIEFDEDAAD', 'LIEFDEDIENST', 'LIEFDEGAVE',
             'LIEFDEGEBOD', 'LIEFDEGESCHIEDENIS', 'LIEFDEGESTICHT', 'LIEFDEGIFT', 'LIEFDEGROET', 'LIEFDEKRACHT',
             'LIEFDELEVEN', 'LIEFDELOOS', 'LIEFDELOOSHEID', 'LIEFDEMAAL', 'LIEFDERIJK', 'LIEFDESAFFAIRE',
             'LIEFDESAVONTUUR', 'LIEFDESBABY', 'LIEFDESBAND', 'LIEFDESBELEVING', 'LIEFDESBETREKKING',
             'LIEFDESBETUIGING', 'LIEFDESBOODSCHAP', 'LIEFDESBRIEF', 'LIEFDESDAAD', 'LIEFDESDRAMA', 'LIEFDESDRANK',
             'LIEFDESENERGIE', 'LIEFDESFILM', 'LIEFDESGEBIED', 'LIEFDESGEDICHT', 'LIEFDESGELUK', 'LIEFDESGESCHIEDENIS',
             'LIEFDESGOD', 'LIEFDESGODIN', 'LIEFDESIDEAAL', 'LIEFDESKIND', 'LIEFDESKOPPEL', 'LIEFDESKRACHT',
             'LIEFDESLEED', 'LIEFDESLEVEN', 'LIEFDESLIED', 'LIEFDESLYRIEK', 'LIEFDESMART', 'LIEFDESNAAM',
             'LIEFDESNACHT', 'LIEFDESNEST', 'LIEFDESNESTJE', 'LIEFDESOBJECT', 'LIEFDESPAAR', 'LIEFDESPAD',
             'LIEFDESPARTNER', 'LIEFDESPEL', 'LIEFDESPIJN', 'LIEFDESPOEZIE', 'LIEFDESRELATIE', 'LIEFDESROMAN',
             'LIEFDESSCENE', 'LIEFDESSPEL', 'LIEFDESTHEMA', 'LIEFDESVERDRIET', 'LIEFDESVERHAAL', 'LIEFDESVERHOUDING',
             'LIEFDESVERKLARING', 'LIEFDESVERLANGEN', 'LIEFDESVERRAAD', 'LIEFDESVUUR', 'LIEFDEVERKLARING', 'LIEFDEVOL',
             'LIEFDEWERK', 'LIEFDEZUSTER', 'MANNENLIEFDE', 'MENSENLIEFDE', 'MOEDERLIEFDE', 'NAASTENLIEFDE',
             'NATUURLIEFDE', 'OUDERLIEFDE', 'VADERLANDSLIEFDE', 'VADERLIEFDE', 'VAKANTIELIEFDE', 'VOORLIEFDE',
             'VRIJHEIDSLIEFDE', 'VROUWENLIEFDE', 'WAARHEIDSLIEFDE', 'WEDERLIEFDE', 'ZOMERLIEFDE', 'ZUSTERLIEFDE',
             'LIEFDESERVARING', 'LIEFDESSMART', 'HAAT-LIEFDERELATIE', 'KONINGSLIEFDE', 'BELIEFDEN', 'DOORKLIEFDE',
             'DOORKLIEFDEN', 'GEKLIEFDE', 'GEKLIEFDEN', 'GELIEFDEN', 'GELIEFDER', 'GELIEFDERE', 'KALVERLIEFDES',
             'LIEFDEBANDEN', 'LIEFDEBETUIGINGEN', 'LIEFDEBEURTEN', 'LIEFDEBLIJKEN', 'LIEFDEBRIEVEN', 'LIEFDEDIENSTEN',
             'LIEFDEGAVEN', 'LIEFDEGESTICHTEN', 'LIEFDEGIFTEN', 'LIEFDELOZE', 'LIEFDELOZER', 'LIEFDEMALEN',
             'LIEFDERIJKE', 'LIEFDERIJKER', 'LIEFDERIJKSTE', 'LIEFDESAVONTUREN', 'LIEFDESBETREKKINGEN',
             'LIEFDESBETUIGINGEN', 'LIEFDESBRIEVEN', "LIEFDESDRAMA'S", 'LIEFDESFILMS', 'LIEFDESGESCHIEDENISSEN',
             'LIEFDESLIEDJE', 'LIEFDESLIEDJES', 'LIEFDESPAARTJE', 'LIEFDESRELATIES', 'LIEFDESROMANS', 'LIEFDESVERHALEN',
             'LIEFDESVERKLARINGEN', 'LIEFDESVERSJE', 'LIEFDEVERKLARINGEN', 'LIEFDEVOLLE', 'LIEFDEWERKEN',
             'LIEFDEZUSTERS', 'SMOORVERLIEFDE', 'TEERGELIEFDE', 'VEELGELIEFDE', 'VERLIEFDEN', 'VERLIEFDER',
             'VOORLIEFDES', 'WELGELIEFDE', 'ZIELSGELIEFDE', 'JEUGDLIEFDES', 'LIEFDEBETREKKINGEN', 'LIEFDEDADEN',
             'LIEFDEGESCHIEDENISSEN', 'LIEFDESAFFAIRES', 'LIEFDESGEDICHTEN', 'LIEFDESLIEDEREN', 'LIEFDESPAREN',
             'LIEFDESPARTNERS', 'LIEFDESSCENES', 'LIEFDEVOLLER', 'LIEFDEVOLLERE', 'STAPELVERLIEFDE', 'LIEFDESDRANKEN',
             'LIEFDESVERHOUDINGEN', 'LIEFDELOOST', 'ONGELIEFDE', 'BALVERLIEFDE', 'LIEFDESAVONTUURTJE',
             'LIEFDESROMANNETJE', 'LIEFDESERVARINGEN', 'LIEFDESDADEN', 'HAAT-LIEFDEVERHOUDINGEN', 'LIEFDESNACHTEN',
             'LIEFDESDRANKJES', 'VAKANTIELIEFDES', 'LIEFDESVERHAALTJE', 'LIEFDESBANDEN', 'LIEFDESLEVENS',
             'LIEFDESDRANKJE', 'LIEFDESGEDICHTJE', 'LIEFDESBRIEFJES', 'LIEFDESGEDICHTJES', 'LIEFDESROMANNETJES',
             'LIEFDESVERHAALTJES', 'LIEFDESVERLANGENS', 'LIEFDESAVONTUURTJES', 'LIEFDEKRACHTEN', 'LIEFDESPIJNEN',
             'LIEFDESKOPPELTJE', "LIEFDESBABY'S", 'LIEFDESSPELLETJES', 'LIEFDESBRIEFJE', 'LIEFDESNESTJES',
             'LIEFDESBOODSCHAPPEN', 'HAATLIEFDE', 'LIEFDEBLIKKEN', 'LIEFDEGEDICHTEN', 'LIEFDELIED', 'LIEFDERIJKEN',
             'HAATLIEFDEVERHOUDING', 'HAATLIEFDE-VERHOUDING'],
            self.wb.contains("liefde"))

    def test_not_contains(self):
        self.assertEqual(['AU',
                          'HA',
                          'HUH',
                          'QUA',
                          'A',
                          'A3',
                          'A4',
                          'AAA',
                          'AA',
                          'HAU',
                          'HU',
                          'AH',
                          'AHA',
                          'H',
                          'HAHA',
                          'Q',
                          'Q.Q.',
                          'U',
                          '06'], self.wb.not_contains("BCDEFGIJKLMNOPRSTVWXYZ"))

    def test_by_same_word_plus_one_letter(self):
        self.assertEqual(['BOOMKLEVER'], self.wb.by_same_word_plus_one_letter("BOOMKEVER"))
        self.assertSequenceEqual(['KREKEL', 'REKELS'], self.wb.by_same_word_plus_one_letter("rekel"))
Пример #9
0
def letters_is_word(txt, index=0):
    wb = Woordenboek()
    return wb.is_word(letters(txt, index))