Meiko & DreamKiller
Meiko Meiko
Π― Ρ‚ΡƒΡ‚ написала нСбольшой скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выявляСт логичСскиС нСстыковки Π² Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π΅ – ΠΊΠ°ΠΊ Π±Ρ‹ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π»ΠΆΠΈ для тСкста. Π”ΡƒΠΌΠ°ΡŽ, ΠΎΠ½ Ρ‚Π΅Π±Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π΄Π°ΠΆΠ΅ с Ρ‚Π°ΠΊΠΈΠΌ простым Π·Π°ΠΊΠ°Π·ΠΎΠΌ ΠΊΠΎΡ„Π΅, ΠΈΠ»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π΄Π°ΠΆΠ΅ с Ρ‚Π²ΠΎΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΌΠΎΠΌ. Π₯ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?
DreamKiller DreamKiller
Π”Π°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΠΉ. Волько смотри, ΠΏΡƒΡΡ‚ΡŒ Π½Π΅ пытаСтся Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΈ прСдпочтСния Π² ΠΊΠΎΡ„Π΅ ΠΈΠ»ΠΈ ΠΌΠΎΠΉ Π½Π΅ΠΏΡ€ΠΈΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΌ.
Meiko Meiko
ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ. Π’ΠΎΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сканируСт тСкст ΠΈ считаСт утвСрТдСния, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‰ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅ установлСнным Ρ„Π°ΠΊΡ‚Π°ΠΌ. Он Π²Π΅Π΄Ρ‘Ρ‚ простой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ зафиксированных Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚ с ΡƒΠΆΠ΅ сохранённым. ΠšΠΎΡ„Π΅ ΠΈ "ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΌ" ΠΎΠ½ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚, Ссли Ρ‚Ρ‹ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡˆΡŒ ΠΈΡ… явно. ```python # simple_contradiction_checker.py def add_fact(facts, key, value): """БохраняСт Ρ„Π°ΠΊΡ‚; Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли ΠΊΠ»ΡŽΡ‡ ΡƒΠΆΠ΅ сущСствуСт с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.""" if key in facts and facts[key] != value: raise ValueError(f"ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ΅: {key} Π±Ρ‹Π» {facts[key]}, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ {value}") facts[key] = value def check_text(text): """ ΠžΡ‡Π΅Π½ΡŒ Π½Π°ΠΈΠ²Π½Ρ‹ΠΉ парсинг: ΠΈΡ‰Π΅Ρ‚ Ρ„Ρ€Π°Π·Ρ‹ Ρ‚ΠΈΠΏΠ° "X β€” это Y" ΠΈΠ»ΠΈ "X ΠΈΠΌΠ΅Π΅Ρ‚ Y". НС ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ NLP-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½ΠΎ достаточно для быстрой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. """ import re facts = {} # шаблон соотвСтствуСт 'X is Y', 'X has Y', 'X is a Y' ΠΈ Ρ‚.Π΄. pattern = re.compile(r'(\w+)\s+(?:is|has|is a|is an)\s+(\w+)', re.IGNORECASE) for match in pattern.finditer(text): subject, obj = match.group(1).lower(), match.group(2).lower() try: add_fact(facts, subject, obj) except ValueError as e: print(e) return facts if __name__ == "__main__": sample = """ The sky is blue. The sky has clouds. The sky is green. I am a programmer. """ print("Initial facts:") print(check_text(sample)) ``` Запусти Π΅Π³ΠΎ, подсовывай свой Π°Π±Π·Π°Ρ†, ΠΈ ΠΎΠ½ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ΅ β€” Π±Π΅Π· диагностики ΠΊΠΎΡ„Π΅ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΌΠ°, просто Ρ„Π°ΠΊΡ‚Ρ‡Π΅ΠΊΠΈΠ½Π³.