Seite 1 von 1

Wikipedia API

Verfasst: Donnerstag 12. August 2021, 12:01
von Bio Salami
Hi,
ich arbeite gerade mit der Wikipedia API und habe da einige Probleme.

Code: Alles auswählen


wiki_wiki = wikipediaapi.Wikipedia('de')
question = input("Was suchst du?")
page_py = wiki_wiki.page(question)
ans = page_py.summary
print(ans)
Laut der Dokumentation soll man den Parameter sentences=1 hinzufügen können. Es soll dann so aussehen:

Code: Alles auswählen

wiki_wiki = wikipediaapi.Wikipedia('de')
question = input("Was suchst du?")
page_py = wiki_wiki.page(question)
ans = page_py.summary(sentences=1)
print(ans)
Führe ich den Code aber aus kommt diese Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "c:\Users\Salami\Documents\Sprachasistent\Skripte\testa.py", line 5, in <module>
    ans = page_py.summary(sentences=1)
TypeError: 'str' object is not callable
Ich habe schon vieles versucht und gebe Langsam auf.

Noch eine Frage, kann man die Klammern herausfiltern? Am besten gleich mit dem Text.
Thx

Re: Wikipedia API

Verfasst: Donnerstag 12. August 2021, 12:37
von rogerb
@Bio Salami,
Laut der Dokumentation soll man den Parameter sentences=1 hinzufügen können. Es soll dann so aussehen:
Kannst du mal verlinken wo du das gelesen hast?

page_py.summary ist ein String. Den kann man nicht wie eine Funktion aufrufen.

oder meinst du das:

Code: Alles auswählen

print(wiki_wiki.extracts(page_py, exsentences=1))

Re: Wikipedia API

Verfasst: Donnerstag 12. August 2021, 14:18
von AlexL
An diesem (sentences=1) habe ich mir auch die Zähne ausgebissen. Keine Ahnung wie das funktionieren soll.

Um nur den ersten Satz der Summery anzuzeigen, habe ich mir so beholfen:

Code: Alles auswählen

import wikipediaapi
wiki_wiki = wikipediaapi.Wikipedia('en')
question = input("Was suchst du?")
page_py = wiki_wiki.page(question)
summary_string = page_py.summary
end_position = summary_string.find('.') 
first_sentence = summary_string[0:end_position + 1]
print(first_sentence)

Re: Wikipedia API

Verfasst: Donnerstag 12. August 2021, 14:48
von __blackjack__
@AlexL: Wobei das nicht zuverlässig ist. Sollte beispielsweise im ersten Satz eine Abkürzung stehen, dann ist da ja auch mindestens ein Punkt, aber eben nicht am Ende des Satzes. An der Stelle wird eventuell auch klar, warum das gar nicht wirklich funktionieren kann, denn dieses Problem hätte Wikipedia selbst ja auch.

Warum sage ich ”hätte” — es hat das auch:

Code: Alles auswählen

In [48]: wp = wikipediaapi.Wikipedia("de")                                      

In [49]: p = wp.page("Python")                                                  

In [50]: wp.extracts(p, exsentences=1)                                          
Out[50]: 'Python (altgriechisch Πύθων) steht für:\n\nPython (Mythologie), einen Drachen in der griechischen Mythologie\nPythons (Pythonidae), eine Familie großer Schlangen\nEigentliche Pythons (Python), eine Gattung aus der Familie der Pythons\nPython (Programmiersprache), eine Programmiersprache\nMonty Python, eine britische Komikergruppe\nPython (Schiff, 1935), ein Kühlschiff und U-Boot-Versorger\nPython – Lautlos kommt der Tod, einen US-amerikanischen Horrorfilm aus dem Jahr 2000\nPythons 2, einen US-amerikanischen Horrorfilm aus dem Jahr 2001\neinen Vornamen, siehe Peithon\nPython Vehicles Australia, einen australischen Hersteller von AutomobilenPersonen:\n\nPython von Ainos in Thrakien, Schüler Platons, ermordete 360/59 v.'
Ist also ein bisschen mit Vorsicht zu geniessen diese Funktion.

Re: Wikipedia API

Verfasst: Donnerstag 12. August 2021, 15:25
von rogerb
Wie ich gerade feststelle, kommt die Verwirrung dadurch, dass es zwei wikipedia packages für Python gibt.

Die hier:
https://pypi.org/project/wikipedia/
verwendet 'sentences'

Die hier:
https://pypi.org/project/Wikipedia-API/
verwendet 'exsentences'

Die Dokumentation der ersten hilft einem natürlich nicht wenn man die zweite verwendet.

Re: Wikipedia API

Verfasst: Donnerstag 12. August 2021, 16:40
von AlexL
__blackjack__ hat geschrieben: Donnerstag 12. August 2021, 14:48 @AlexL: Wobei das nicht zuverlässig ist. Sollte beispielsweise im ersten Satz eine Abkürzung stehen, dann ist da ja auch mindestens ein Punkt, aber eben nicht am Ende des Satzes. An der Stelle wird eventuell auch klar, warum das gar nicht wirklich funktionieren kann, denn dieses Problem hätte Wikipedia selbst ja auch.
@ __blackjack__: Ja, genau diese Gedanken hatte ich auch und mich dann für die Suche nach dem Punkt entschieden.

Da sind wir wieder an dem Punkt, wo man gern genauer wissen möchte, welches sinnige Vorhaben der Fragende im Kopf hat.

Btw. jetzt, wo ich die API schon mal installiert habe, hat jemand eine schöne Idee, was ich damit machen könnte? Möglichst in Verbindung mit Tkinter.

Re: Wikipedia API

Verfasst: Donnerstag 12. August 2021, 16:47
von AlexL
rogerb hat geschrieben: Donnerstag 12. August 2021, 15:25 Wie ich gerade feststelle, kommt die Verwirrung dadurch, dass es zwei wikipedia packages für Python gibt.

Die hier:
https://pypi.org/project/wikipedia/
verwendet 'sentences'

Die hier:
https://pypi.org/project/Wikipedia-API/
verwendet 'exsentences'

Die Dokumentation der ersten hilft einem natürlich nicht wenn man die zweite verwendet.
Danke für die Info. Ich habe da nicht genauer nachgeschaut, mich aber gewundert, dass bei einigen Beispielen wikipedia importiert wird und bei anderen wikipediaapi.

Solchen "Komischkeiten" gehe ich meist nicht nach. Ich versteh auch nicht, warum man oft print "text" liest. Bei mir meckert Python. Dann bekommt der Text eine Klammer und gut ist. :-)

Schönen Abend noch allen zusammen.

Re: Wikipedia API

Verfasst: Freitag 13. August 2021, 10:44
von Bio Salami
Danke für die Schnellen Antworten,
Ich hatte tatsächlich die andere Wikipedia API verwendet. Jetzt funktioniert es!

Hat jemand noch eine Idee wie ich die Klammern und ihren Inhalt herausfiltern kann?
Danke!

Re: Wikipedia API

Verfasst: Freitag 13. August 2021, 12:39
von rogerb
@Bio Salami
Hat jemand noch eine Idee wie ich die Klammern und ihren Inhalt herausfiltern kann?
Grundätzlich ginge das so zum Beispiel, also über reguläre Ausdrücke:

Code: Alles auswählen

import re

text = "text (mit einigen) Klammern (also ein paar)(nicht so viele)."
regex = re.compile(r"\(.*?\)")

for parenthesis_text in regex.findall(text):
    print(parenthesis_text)

"""
Ausgabe:

(mit einigen)
(also ein paar)
(nicht so viele)
"""
Vielleicht hat die API aber auch schon Funktionen für das was du machen möchtest.

Re: Wikipedia API

Verfasst: Freitag 13. August 2021, 13:18
von __blackjack__
@AlexL: ``print "text"`` ist Python 2. Da war ``print`` keine Funktion sondern eine Anweisung. In Python 3 ist das kein eigenes Schlüsselwort mehr mit besonderer Bedeutung, sondern eine ganz normale, eingebaute Funktion, und muss dann auch wie eine Funktion aufgerufen werden.

Re: Wikipedia API

Verfasst: Samstag 14. August 2021, 08:33
von Bio Salami
rogerb hat geschrieben: Freitag 13. August 2021, 12:39 @Bio Salami
Hat jemand noch eine Idee wie ich die Klammern und ihren Inhalt herausfiltern kann?
Grundätzlich ginge das so zum Beispiel, also über reguläre Ausdrücke:

Code: Alles auswählen

import re

text = "text (mit einigen) Klammern (also ein paar)(nicht so viele)."
regex = re.compile(r"\(.*?\)")

for parenthesis_text in regex.findall(text):
    print(parenthesis_text)

"""
Ausgabe:

(mit einigen)
(also ein paar)
(nicht so viele)
"""
Vielleicht hat die API aber auch schon Funktionen für das was du machen möchtest.
Ich meine das ich eine Variable mit dem Text aber ohne die Klammern habe. Soweit ich verstanden habe werden die Klammern aus der text Variable herausgefiltert und in der regex Variable Gespeichert. Oder kann man den normalen Text auch aus der Variable auslesen?

Endschuldige wenn ich mich missverständlich ausgedrückt habe.

Re: Wikipedia API

Verfasst: Samstag 14. August 2021, 09:12
von __deets__
Kann es sein, dass du eine Liste bekommst? Oder woher kommen diese Klammern?

Re: Wikipedia API

Verfasst: Montag 16. August 2021, 15:56
von Bio Salami
@__deets__ Es ist keine Liste. Es ist ein Text den ich von Wikipedia bekomme. Leider kommt die Sprachausgabe mit dem Inhalt der Klammern nicht immer zurecht, weswegen ich einen Weg suche sie zu entfernen.