python 根據 詞庫 進行「詞聯想」

2022-03-22 23:48:20 字數 4130 閱讀 5716

輸入法中,當你輸入乙個字的時候,輸入法就能猜出你要輸入什麼詞。這就是詞聯想。現在,再python中簡單實現類似這樣的功能:根據制定好的詞庫,輸入乙個新的詞,幫助實現詞聯想。其中分詞用了jieba包。

1

#-*-coding:utf-8-*-23

45"""6

分詞的函式cut_words()

7"""

8def

cut_words(temp):

9import

jieba

10import

re11 wenben = re.sub("

[1234567890\s+\.\!\/_;:,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+

", ""

, temp)

1213 seg_list = jieba.cut(wenben, cut_all=true) #

全模式分詞14#

seg_list = jieba.cut(wenben,cut_all=false)#精確模式分詞15#

seg_list = jieba.cut_for_search(wenben) #搜尋引擎模式

16 lists =

17for item in

seg_list:

1819

20return lists #

分詞結果返回到乙個列表

2122

"""23

統計詞頻的函式get_counts1(),引數lists為切好的詞的列表

24"""

25def

get_counts1(lists):

26 counts ={}

27for item in

lists:

28if item in

counts:

29 counts[item] += 1

30else

:31 counts[item] = 1

32return

counts

3334

35"""

36方法2:統計詞頻的函式get_counts2,引數lists為切好的詞如下:

3738

"""39

from collections import

defaultdict

40def

get_counts2(lists):

41 counts =defaultdict(int)

42for item in

lists:

43 counts[item] += 1

44return

counts

4546

47"""

48統計詞頻的方法3:使用collection的counter方法,引數lists為切好的詞

49"""

5051

52def

get_counts3(lists):

53from collections import

counter

54 counter =counter(lists)

55print(counter.most_common(10))

5657

58"""

59按照詞頻排序的函式get_top_counts()

60"""

6162

63def

get_top_counts(counts):

64 value_keys = sorted([(count, tz) for tz, count in counts.items()], reverse=true)

65 result ={}

66for item in

value_keys:

67 result[item[1]] =item[0]

68return

value_keys69#

return result

7071

"""72

獲取原始文字的所有漢字的聯想詞。函式的引數為原始文字。

73"""

7475

76def

get_lianxiang(temp):

77import

re78 wenzhang = re.sub("

[1234567890\s+\.\!\/_;:,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+

", ""

, temp)

79 a = cut_words(wenzhang) #

分詞80 b = get_counts1(a) #

詞頻統計

81 data ={}

82for i in

range(len(wenzhang)):

83 data[wenzhang[i]] ={}

84for key in

get_counts1(a):

85try:86

if wenzhang[i] ==key[0]:

87 data[wenzhang[i]][key] =b[key]

88except:89

pass

90print

(data)

9192

"""93

詞聯想的函式,輸入的引數為輸入的詞,然後根據詞庫,按照詞頻高低,

94輸出你想輸入的片語,即詞聯想。詞庫為《明朝那些事》的部分章節。

95"""

96def

get_lianxiang1():

97import

re98 word = input("

請出入您想聯想的詞:")

99print("

請稍等...")

100 wenzhang = re.sub("

[1234567890\s+\.\!\/_;:,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+

", ""

, temp)

101 a = cut_words(wenzhang) #

分詞102 b = get_counts1(a) #

詞頻統計

103 data ={}

104for i in

range(len(wenzhang)):

105 data[wenzhang[i]] ={}

106for key in

get_counts1(a):

107try

:108

if wenzhang[i] ==key[0]:

109 data[wenzhang[i]][key] =b[key]

110except

:111

pass

112if word in

data:

113 dic=data[word]

114 a=get_top_counts(dic)

115 b=

116for item in

a:118

#print(a)

119print("

為您聯想的幾個詞為:

",b)

120#

print("聯想結果如下:\n",data[word])

121else

:122

print("

沒有根據本篇文章,您輸入的詞的聯想詞!")

123get_lianxiang1()

124125

126if

__name__ == '

__main__':

127 temp = "

"128 get_lianxiang1() #

呼叫獲取聯想詞的函式。

Python抓取搜尋引擎聯想詞

眾所周知python可以用來寫爬蟲抓取資料。而這個例子是我學習寫的第乙個簡單的爬蟲 抓取 360搜尋引擎搜尋時的聯想詞集合。我們在使用搜尋引 擎搜尋東西時,當我們輸入乙個詞之後搜尋框下方會出現一系列聯想詞如圖所示。我們nba。如圖所示 我們將這個url輸入到位址列中網頁返回了聯想詞的集合如圖所示 c...

python拆分 如何用Python進行片語拆分?

可以先split 做好特殊字元標記,儲存到臨時變數裡面,比如,元組,陣列,或者字典之類的 再遍歷上面的變數,拆分括號,用乙個特殊標記,標記括號裡面的內容,總之找到區分括號和非括號內容就可以,之後儲存到變數 最後遍歷第二個變數,生成句型 抱歉最近精神狀態不太好,又比較忙,今天大概寫了下,應該沒有啥問題...

python包含判斷 字串包含詞庫中的詞

這個方法就是將短文本切分成與詞庫資料等長的詞,判斷是否包含。速率塊,詞與詞包含關係判斷也可用 複製直接用 判斷一條語句是否包含詞庫中的詞 def word parameter word list 包含關係方法所需的詞典 word set set word list num list len word...