2013-03-06 110 views
0

我有一個數據庫,其中包含來自以28種語言發佈的讚美詩的讚美詩的標題。當我在標題中輸入時,我研究了哪種Unicode字符在每種語言中都是最正確的(例如,湯加聲門停止應該是U + 02BB,即使它看起來像一個撇號;而且,在羅馬尼亞語中,U + 021A(ţ)比U + 0163(ţ)等更正確)。在MySQL表中生成唯一字符列表

現在我正在研究一個類似的項目,我想回去「分解」我的研究,收集所有標題以單一語言並輸出標題中使用的所有唯一字符的列表。

有沒有辦法用MySQL和/或Python做到這一點?我正在考慮在每個角色之間分割一個字符串,命令所有角色,並將它們組合在一起。我的網站是Python,但它都是非常基本的編碼(我還沒有太高級)。


編輯:這是我的代碼到底是如何橫空出世,由於這些反應,並且效果很好!

hymnstitleslist = lookup(''' 
    SELECT HyName FROM Hymns 
    WHERE HymnbookID = "'''+hbid+'''" 
''') 
import string 
from collections import Counter 
some_text = "" 
for x in range(0, len(hymnstitleslist)): 
    some_text = some_text+hymnstitleslist[x]['HyName'] 
letters = [] 
for i in some_text: 
    letters.append(i) 
letter_count = Counter(letters) 
for letter,count in letter_count.iteritems(): 
    print "{}: {}".format(letter,count) 
+0

你能解釋一下第二段?不知何故,我得到的是,在一個專欄中,您將使用一種語言保存標題,而在另一欄中您想保存獨特的字符? – 2013-03-06 06:25:07

+0

@RahulJha,我需要一些代碼,這些代碼將會列出標題列表,並給出這些標題中唯一字符的列表。 – 2013-03-06 07:07:11

回答

2

我想的東西,分割每一個字符之間的字符串, 訂單的所有字符,和團體在一起。

這部分是很容易做到:

import string 

from collections import Counter 

some_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque fringilla augue ac metus laoreet quis imperdiet velit congue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque tincidunt lorem ut justo fermentum adipiscing. Nullam ullamcorper eros in arcu tincidunt non scelerisque ligula molestie. Vestibulum imperdiet facilisis nisi, et sodales leo sodales at. In hac habitasse platea dictumst." 

letters = [] 
for i in some_text: 
    # Each "i" is a letter or space 
    if i in string.letters: 
     # only collect letters, not punctuation marks or spaces 
     letters.append(i) 

# count how many of each 
letter_count = Counter(letters) 

# For each letter, print the count: 

for letter,count in letter_count.iteritems(): 
    print "{}: {}".format(letter,count) 

這會給你:

C: 1 
I: 1 
L: 1 
N: 1 
Q: 1 
P: 1 
V: 2 
a: 24 
c: 19 
b: 5 
e: 44 
d: 10 
g: 6 
f: 4 
i: 44 
h: 2 
j: 1 
m: 17 
l: 27 
o: 17 
n: 18 
q: 4 
p: 10 
s: 32 
r: 19 
u: 34 
t: 31 
v: 1 

我從一個MySQL表拉,所以我的數據是在一本字典。 我如何組合來自所有選定條目的數據?

那麼第一步將是所有的數據收集到某種類型的集合,可以說一個列表:

letters = [] 

cur.execute(some_query) # See the Python database API for what is going on here 
results = cur.fetchone() 

while results: 
    the_text = results[0] # if its the first column 
    for i in the_text.split(): 
     # By default, split() will separate on whitespace, 
     # so each i is a word. 
     for letter in i: 
      if letter in string.letters: 
       letters.append(letter) 

    results = cur.fetchone() # get the next result 
+0

我從MySQL表中拉出,所以我的數據是在字典中。我如何組合來自所有選定條目的數據? hymnstitleslist =查找( ''」 SELECT HyName FROM讚美詩 WHERE HymnbookID = 「 '' '+ hbid +' ''」 '' ') 進口串 從集合導入計數器 SOME_TEXT = hymnstitleslist [0] [' HyName 「] 字母= [] 對於i在SOME_TEXT: #每個 「i」 是一個字母或空間 letters.append(ⅰ) #計數多少的每個 letter_count =計數器(字母) #對於每個信,打印計數: 爲letter,計入letter_count.iteritems(): 打印「{}:{}」。格式(letter,count) – 2013-03-06 07:03:12

+0

對不起,我無法獲得代碼顯示得非常好。我會再試一次:) 我的數據是在一本字典中。我如何組合來自所有選定條目的數據? hymnstitleslist =查找( ''」 SELECT HyName FROM讚美詩 WHERE HymnbookID = 「 '' '+ hbid +' ''」 '' ') 進口串 從集合導入計數器 SOME_TEXT = hymnstitleslist [0] [' HyName 「] 字母[] 對於i =在SOME_TEXT: letters.append(ⅰ) letter_count =計數器(字母) 字母,計數在letter_count.iteritems(): 打印 「{}:{}」。格式(letter,count) – 2013-03-06 07:09:34

+0

我結束了使用for循環將字典中的每個「HyName」字段連接成一個大字符串。謝謝! – 2013-03-06 07:56:22

1

您可以按字母拆分所有標題並將其添加到設置中。在設置你得到所有獨特的人物。而簡單的例子是:

all_you_titles_string = 'title1 title2 ti tl e3' 
result_set = set() 
[result_set.add(letter) for letter in all_you_titles_string.replace(' ', '')] 
print result_set 
+0

如何從字典中的所有條目獲取結果,而不僅僅是一個字符串? – 2013-03-06 07:18:09

+0

@Samuel抱歉,我不明白你的問題,試着用僞代碼寫出你有什麼樣的結構和你想要的。 – Denis 2013-03-06 07:28:40

+0

1.我有這個:'hymnstitleslist = lookup('''SELECT HyName FROM Hymns WHY HymnbookID =''''+ hbid +''''''')'2.我不知道該怎麼做:''將所有HyNames連接成一個字符串'3.'result_set = set()...'(這是你展示給我的部分)。 – 2013-03-06 07:43:46