http://www.cl.ecei.tohoku.ac.jp/nlp100/ Wurde erneuert und es scheint, dass die Version 2015 veröffentlicht wurde.
Ich habe versucht, meine Lieblingspython (2 Serien) zu verwenden. Ich weiß, dass es viele ähnliche Artikel gibt, aber (und ich sehe) http://qiita.com/tanaka0325/items/08831b96b684d7ecb2f7 Es ist auch für die Öffentlichkeit als Memo Ihres Fortschritts + Teilens zugänglich. Wenn Sie Vorschläge haben, danke.
Ich möchte nach Kapitel 2 fortfahren ... "Rehabilitation" ist nur dann sinnvoll, wenn es weitergeht!
Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).
Ehrlich
text = "stressed"
text_reverse = ""
n = len(text)
for i in xrange(n):
text_reverse += text[n-i-1]
print text_reverse
#>>> desserts
Holen Sie sich vom Ende bis zum Anfang ehrlich mit Indizes. Es funktioniert auch, wenn text = "".
Verbesserte Version
text = "stressed"
n = len(text)
text_reverse_list = [text[n-i-1] for i in xrange(n)]
text_reverse = ''.join(text_reverse_list)
print text_reverse
#>>> desserts
Nachtrag: Es scheint, dass die Verbindung zu einer Zeichenkette mit einer for-Schleife in Bezug auf Ausführungsgeschwindigkeit und Speicher nicht gut ist. Also bezog ich mich auf die Methode "Erstellen einer Liste von Zeichenketten → Verbinden mit Join".
Scheibe
text = "stressed"
text_reverse = text[::-1]
print text_reverse
#>>> desserts
Einfach mit Scheiben. String-Objekt [Startindex: Endindex: Schritt]
Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.
python
text = u"Patatoku Kashii"
text_concat = text[0] + text[2] + text[4] + text[6]
print text_concat
#>>>Pat Auto
Ich habe die Zeichenkette als Unicode angegeben.
python
text = u"Patatoku Kashii"
text_concat = text[::2]
print text_concat
#>>>Pat Auto
Ich verstehe, können Sie das gleiche mit Scheiben tun?
Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.
python
text1 = u"Pat Auto"
text2 = u"Taxi"
text_concat = ""
m = len(text1)
n = len(text2)
for i in xrange(m):
if i<n:
text_concat += text1[i] + text2[i]
if i == m-1:
text_concat += text2[i+1:]
else:
text_concat += text1[i:]
break
print text_concat
#>>>Patatoku Kashii
Schauen wir uns die beiden Saiten von Anfang an an. Dieses Problem ist kein direktes Problem. Betrachten Sie den Fall, in dem text1 und text2 nicht gleich lang sind (m! = N). Zu diesem Zeitpunkt, wenn man fertig ist, Der andere beschloss, die nachfolgenden Zeichenfolgen zu verketten.
Brechen Sie den Satz auf "Jetzt brauche ich einen Drink, natürlich alkoholisch, nach den schweren Vorlesungen über Quantenmechanik."
python
sentence = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
word_length = [len(x.strip(',.')) for x in sentence.split()]
print word_length
#>>> [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
--Liste Einschlussnotation
Ich mag Python, weil es so intelligent einzeilig sein kann.
Brechen Sie den Satz "Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch die Friedenssicherheitsklausel unterzeichnen. Arthur King Can." In die Wörter 1, 5, 6, 7, 8, 9, 15, 16 auf. Das 19. Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen und das assoziative Array (Wörterbuchtyp oder Kartentyp) von der extrahierten Zeichenfolge bis zur Position des Wortes (welche Anzahl von Wörtern von Anfang an) Erstellen.
python
sentence = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
word_list = [x.strip(',.') for x in sentence.split()]
word_dict = dict()
specified = [1, 5, 6, 7, 8, 9, 15, 16, 19]
for i, word in enumerate(word_list):
if i in [x-1 for x in specified]:
word_dict[word[:1]] = i+1
else:
word_dict[word[:2]] = i+1
print word_dict
#>>> {'Be': 4, 'C': 6, 'B': 5, 'Ca': 20, 'F': 9, 'S': 16, 'H': 1, 'K': 19, 'Al': 13, 'Mi': 12, 'Ne': 10, 'O': 8, 'Li': 3, 'P': 15, 'Si': 14, 'Ar': 18, 'Na': 11, 'N': 7, 'Cl': 17, 'He': 2}
print word_dict['Be']
#>>> 4
Ich habe i + 1 in word_dict eingefügt, um es mit dem im Problem angegebenen "th" in Einklang zu bringen. Nun, ich habe es nach dem Lösen bemerkt, aber habe ich die "Ordnungszahl, dh die Anzahl der Protonen" erhalten? Ich vermisse "Suihe, Ribe, mein Spaß".
Ich frage mich, ob Magnesium "Mg" ist.
python
'Mi': 12
Erstellen Sie eine Funktion, die aus einer bestimmten Sequenz (Zeichenfolge, Liste usw.) ein n-Gramm erstellt. Verwenden Sie diese Funktion, um das Wort Bi-Gramm und den Buchstaben Bi-Gramm aus dem Satz "Ich bin ein NLPer" zu erhalten.
python
def n_gram(sentence_str, n, type):
result = set()
if type == 'word':
words = [x.strip(',.') for x in sentence_str.split()]
elif type == 'letter':
words = sentence_str
m = len(words)
for i in xrange(m-n+1):
result.add(tuple(words[i:i+n]))
return result
#Wenn Sie auch Frequenzinformationen wünschen
from collections import defaultdict
def n_gram_freq(sentence_str, n, type):
result = defaultdict(int)
if type == 'word':
words = [x.strip(',.') for x in sentence_str.split()]
elif type == 'letter':
words = sentence_str
m = len(words)
for i in xrange(m-n+1):
result[tuple(words[i:i+n])] += 1
return result
sentence_str = "I am an NLPer"
#sentence_list = ['I', 'am', 'an', 'NLPer']
print n_gram(sentence_str, 2, 'word')
#>>> set([('am', 'an'), ('an', 'NLPer'), ('I', 'am')])
print n_gram(sentence_str, 2, 'letter')
#>>> set([('N', 'L'), ('m', ' '), ('e', 'r'), ('a', 'n'), ('I', ' '), ('n', ' '), ('L', 'P'), (' ', 'N'), (' ', 'a'), ('a', 'm'), ('P', 'e')])
print n_gram_freq(sentence_str, 2, 'word')
#>>> defaultdict(<type 'int'>, {('am', 'an'): 1, ('an', 'NLPer'): 1, ('I', 'am'): 1})
print n_gram_freq(sentence_str, 2, 'letter')
#>>>defaultdict(<type 'int'>, {('N', 'L'): 1, ('m', ' '): 1, ('e', 'r'): 1, ('a', 'n'): 1, ('I', ' '): 1, ('n', ' '): 1, ('L', 'P'): 1, (' ', 'N'): 1, (' ', 'a'): 2, ('a', 'm'): 1, ('P', 'e'): 1})
Nehmen Sie eine Zeichenfolge als Argument. Ermöglicht die Auswahl des Wortes n-Gramm und des Zeichens n-Gramm mit einem anderen Argumenttyp.
Suchen Sie den in "paraparaparadise" und "Absatz" enthaltenen Satz von Zeichen-Bi-Gramm als X bzw. Y und suchen Sie die Summen-, Produkt- und Differenzsätze von X bzw. Y. Finden Sie außerdem heraus, ob das Bi-Gramm in X und Y enthalten ist.
python
str_x = "paraparaparadise"
str_y = "paragraph"
X = n_gram(str_x, 2, 'letter')
Y = n_gram(str_y, 2, 'letter')
print X.union(Y) #Summensatz. X.|Synonym für Y.
#>>>set([('g', 'r'), ('p', 'h'), ('p', 'a'), ('s', 'e'), ('a', 'p'), ('a', 'g'), ('a', 'd'), ('i', 's'), ('r', 'a'), ('a', 'r'), ('d', 'i')])
print X.intersection(Y) #Produktset. X.&Synonym für Y.
#>>>set([('a', 'p'), ('r', 'a'), ('p', 'a'), ('a', 'r')])
print X.difference(Y) #Differenz gesetzt. X.-Synonym für Y.
#>>>set([('a', 'd'), ('s', 'e'), ('d', 'i'), ('i', 's')])
tuple('se') in X
#>>> True
tuple('se') in Y
#>>> False
Verwenden Sie die in der vorherigen Frage definierte Funktion. Bei der Definition der Funktion wird das gegebene "se" in ein Tupel umgewandelt und die Bedingung beurteilt.
Implementieren Sie eine Funktion, die die Argumente x, y, z verwendet und die Zeichenfolge "y bei x ist z" zurückgibt. Setzen Sie außerdem x = 12, y = "Temperatur", z = 22,4 und überprüfen Sie das Ausführungsergebnis.
python
from string import Template
def generate_sentence(x,y,z):
t = Template("${x_tmpl}von Zeit${y_tmpl}Ist${z_tmpl}")
return t.safe_substitute(x_tmpl=x, y_tmpl=y, z_tmpl=z)
def generate_sentence_incomplete(x,y,z):
t = Template("${x_tmpl}von Zeit${y_tmpl}Ist${z_tmpl}")
return t.safe_substitute(x_tmpl=x, y_tmpl=y)
x, y, z =12, "Temperatur", 22.4
print generate_sentence(x,y,z)
#>>>Die Temperatur um 12 Uhr ist 22.4
print generate_sentence_incomplete(x,y,z)
#>>>Die Temperatur um 12 Uhr${z_tmpl}
Da ich Template.safe_substitute () verwendet habe http://docs.python.jp/2/library/string.html#string.Template.safe_substitute
Wie replace (), aber anstatt eine KeyError-Ausnahme auszulösen, wird der ursprüngliche Platzhalter so eingefügt, wie er ist, wenn das Mapping oder kws keinen entsprechenden Platzhalter finden können.
Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge mit den folgenden Spezifikationen konvertiert. Durch Kleinbuchstaben ersetzen (219 - Zeichencode) Geben Sie andere Zeichen so aus, wie sie sind Verwenden Sie diese Funktion, um englische Nachrichten zu verschlüsseln / entschlüsseln.
python
def cipher(input_str):
result = ""
for letter in input_str:
#Wenn es in Kleinbuchstaben ist
if letter.isalpha() and letter.islower():
result += chr(219-ord(letter))
else:
result += letter
return result
english_message = "This is a pen."
#Verschlüsselung
print cipher(english_message)
#>>> Tsrh rh z kvm.
#Entschlüsselung
print cipher(cipher(english_message))
#>>> This is a pen.
Ich kannte dieses Thema nicht, aber es scheint Atbash-Code zu heißen. http://www.mitsubishielectric.co.jp/security/learn/info/misty/stage1.html
Code wurde auch im Alten Testament verwendet. Einer von ihnen ist der hebräische Transliterationscode Atbash. Dieser Code wird erstellt, indem die Zeichen nummeriert und die Reihenfolge von Anfang an und die Reihenfolge von Ende an vertauscht werden. Wenn Sie die 26 Buchstaben des Alphabets verschlüsseln möchten, ändern Sie die Reihenfolge von A nach Z, B nach Y usw.
Deshalb können Ver- und Entschlüsselung mit derselben Funktion erreicht werden. (Sie können die ursprüngliche Zeichenfolge erhalten, indem Sie dieselbe Funktion zweimal anwenden.)
Klicken Sie hier, um die verwendeten integrierten Funktionen anzuzeigen.
Eingebaute Funktionen
str.isalpha()
str.islower()
ord()
chr()
unichr()
# http://docs.python.jp/2.6/library/functions.html#ord
# http://docs.python.jp/2.6/library/functions.html#chr
# http://docs.python.jp/2.6/library/functions.html#unichr
Erstellen Sie ein Programm, das die Reihenfolge der anderen Zeichen zufällig neu anordnet, wobei das erste und das letzte Zeichen jedes Wortes für die Wortfolge durch Leerzeichen getrennt bleiben. Wörter mit einer Länge von 4 oder weniger werden jedoch nicht neu angeordnet. Geben Sie einen geeigneten englischen Satz ein (zum Beispiel: "Ich konnte nicht glauben, dass ich tatsächlich verstehen konnte, was ich las: die phänomenale Kraft des menschlichen Geistes.") Und überprüfen Sie das Ausführungsergebnis.
python
import random
def random_shuffled_str(input_str):
input_list = list(input_str)
random.shuffle(input_list)
result = ''.join(input_list)
return result
def typoglycemia(sentence):
str_list = sentence.split()
result_list = [x[0]+ random_shuffled_str(x[1:-1]) +x[-1] if len(x) > 4 else x for x in str_list]
return ' '.join(result_list)
message = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
print typoglycemia(message)
#>>> I cunl'dot beveile that I cloud aallucty unsrndtead what I was rdaineg : the phaenmneol pweor of the huamn mind .
print typoglycemia(message)
#>>> I cu'dolnt bivelee that I cloud aculltay udetnnasrd what I was ridneag : the pheonaenml peowr of the hamun mind .
Wenn Sie else in der Einschlussnotation der Liste verwenden möchten
python
if len(x) > 4 else x
Ich werde es in diese Position bringen ... Und random.shuffle.
http://docs.python.jp/2/library/random.html
random.shuffle(x[, random]) Sequenz x durch direkte Modifikation mischen. Das optionale Argument random ist eine Funktion ohne Argumente, die eine zufällige Gleitkommazahl mit einem Bereich von [0.0, 1.0) zurückgeben. Standardmäßig ist diese Funktion random ().
Beachten Sie, dass selbst mit einer relativ kleinen Länge (x) die Folge von x größer ist als die Periode der meisten Zufallsgeneratoren. Dies bedeutet, dass die meisten Folgen nicht für lange Folgen erzeugt werden. Meint
Recommended Posts