cuốn sách gpt4 ai đã làm

python - Xác suất đếm/tần số của các từ liên quan?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 08:17:00 30 4
mua khóa gpt4 Nike

Tôi đang tìm cách tạo ra các giá trị xác suất bằng số cho các từ riêng lẻ có gốc/nghĩa chung.

Người dùng sẽ tạo nội dung bằng cách sử dụng các từ như "vũ công", "khiêu vũ", "khiêu vũ", v.v.

Nếu "vũ công" được gửi 30 lần và nhảy 5 lần, tôi chỉ cần giá trị "dance:35" để chụp được tất cả.

Nhưng khi người dùng cũng gửi một từ như "tương ứng", nó sẽ không ảnh hưởng đến số lần "nhảy" của tôi mà được thêm vào một số đếm riêng cùng với các từ như "theo" và "tương ứng".

Ngoài ra, tôi không có danh sách các từ gốc được xác định trước để tìm kiếm. Tôi cần tạo nó một cách linh hoạt dựa trên nội dung do người dùng tạo.

Vì vậy, câu hỏi của tôi là, cách tốt nhất để đạt được điều này là gì? Tôi chắc chắn sẽ không có giải pháp hoàn hảo, nhưng tôi nghĩ ai đó ở đây có thể nghĩ ra cách tiếp cận tốt hơn tôi.

Suy nghĩ của tôi cho đến nay là cho rằng những từ có ý nghĩa nhất phải dài ít nhất 3 hoặc 4 chữ cái. Vì vậy, với mỗi từ tôi gặp dài hơn 4, hãy giảm nó xuống còn 4 ("dancers" trở thành "danc"), kiểm tra danh sách từ của tôi để xem tôi đã gặp nó trước đây chưa, và nếu có - hãy tăng nó lên, nếu không - thêm nó vào danh sách, lặp lại.

Tôi thấy một số câu hỏi tương tự ở đây. Nhưng tôi chưa tìm thấy câu trả lời nào cần cân nhắc kỹ lưỡng và tôi có thể triển khai nó trong python. Câu trả lời dường như là cái này hay cái khác.

câu trả lời hay nhất

Bạn không cần trình bao bọc Python cho thư viện Java, nltk có Snowball! :)

>>> từ nltk.stem nhập SnowballStemmer dưới dạng SS
>>> gốc = SS('tiếng Anh')
>>> gốc.stem('dance')
bạn'danc'
>>> gốc.stem('dance')
bạn'danc'
>>> gốc.stem('nhảy múa')
bạn'danc'
>>> gốc.stem('vũ công')
bạn là vũ công'
>>> gốc.stem('accordance')
bạn đồng ý'

Từ gốc không phải lúc nào cũng cung cấp cho bạn gốc chính xác của từ, nhưng đó là một khởi đầu tốt.

Dưới đây là ví dụ về việc sử dụng thân cây. tôi đang xây dựng gốc: (từ, số đếm) từ điển trong khi chọn từ ngắn nhất có thể cho mỗi gốc. Vì vậy ['dancing', 'dance', 'dances', 'dance', 'dancer'] được chuyển đổi thành {'danc': ('dance', 4), 'dancer': ('dancer', 1 )}

Mã mẫu:(Văn bản được lấy từ http://en.wikipedia.org/wiki/Dance)

import re
từ nltk.stem nhập SnowballStemmer dưới dạng SS

text = """Khiêu vũ đã phát triển nhiều phong cách. Khiêu vũ châu Phi mang tính diễn giải.
Ballet, khiêu vũ (chẳng hạn như điệu waltz) và tango là những phong cách khiêu vũ cổ điển
trong khi múa vuông và cầu trượt điện là các hình thức múa bước.
Những hình thức phát triển gần đây hơn là breakdance và các hình thức khiêu vũ đường phố khác,
thường gắn liền với văn hóa hip hop.
Mỗi điệu nhảy, dù theo phong cách nào, đều có điểm chung.
Nó không chỉ liên quan đến sự linh hoạt và chuyển động của cơ thể mà còn cả vật lý.
Nếu không tính đến yếu tố vật lý phù hợp, thương tích có thể xảy ra."""
#trích xuất từ
từ = [word.low() cho từ trong re.findall(r'\w+',text)]

gốc = SS('tiếng Anh')
đếm = dict()

#đếm gốc và trích xuất những từ ngắn nhất có thể
cho từ trong từ:
gốc = gốc.stem(từ)
nếu gốc được tính:
ngắn nhất, đếm = đếm [gốc]
nếu len(word) < len(ngắn nhất):
ngắn nhất = từ
số lượng [gốc] = (ngắn nhất, số lượng + 1)
khác:
đếm[gốc]=(từ,1)

#convert {key: (word, count)} thành [(word, count, key)] để sắp xếp và in thuận tiện
đầu ra = [wordcount + (root,) cho root,wordcount trong count.items()]
#trick sắp xếp đầu ra theo số đếm (giảm dần) & từ (theo bảng chữ cái)
đầu ra.sort(key=lambda x: (-x[1],x[0]))
cho mục ở đầu ra:
in '%s:%d (Gốc: %s)' % mục

输出:

nhảy:7 (Gốc: nhảy)
và:4 (Gốc: và)
là:4 (Gốc: là)
của:3 (Gốc: của)
phong cách:3 (Gốc: phong cách)
the:3 (Gốc: the)
tiến hóa:2 (Gốc: tiến hóa)
biểu mẫu:2 (Gốc: biểu mẫu)
có:2 (Gốc: có)
not:2 (Gốc: không)
vật lý:2 (Gốc: vật lý)
Châu Phi:1 (Gốc: Châu Phi)
cũng:1 (Gốc: cũng)
dưới dạng:1 (Gốc: as)
liên kết:1 (Gốc: liên kết)
múa ba lê:1 (Gốc: múa ba lê)
phòng khiêu vũ:1 (Gốc: phòng khiêu vũ)
cơ thể:1 (Gốc: cơ thể)
breakdance:1 (Gốc: breakdance)
---cắt ngắn---

Tôi sẽ không khuyên bạn nên bổ sung cho các nhu cầu cụ thể của bạn:

>>> từ nltk.stem.wordnet nhập WordNetLemmatizer
>>> lmtzr = WordNetLemmatizer()
>>> lmtzr.lemmatize('dance')
'nhảy'
>>> lmtzr.lemmatize('vũ công')
'vũ công'
>>> lmtzr.lemmatize('nhảy múa')
'khiêu vũ'
>>> lmtzr.lemmatize('dances')
'nhảy'
>>> lmtzr.lemmatize('dance')
'khiêu vũ'

Chuỗi con không phải là một ý tưởng hay vì nó sẽ luôn thất bại ở một số điểm và nhiều khi nó sẽ thất bại thảm hại.

  • Độ dài cố định: Các từ giả "dancitization" và "dance" sẽ lần lượt khớp với 4 và 5 ký tự của "dance".
  • Tỷ lệ: Tỷ lệ thấp sẽ trả về hàng giả (như trên)
  • tỷ lệ: Tỷ lệ cao sẽ không đủ phù hợp (ví dụ: 'đang chạy')

Nhưng với việc bắt nguồn, bạn nhận được:

>>> gốcmer.stem('dancitization')
bạn'dancit'
>>> gốc.stem('dancendence')
bạn sẽ nhảy'
>>> #vì nhảy múa mang lại cho chúng ta điệu nhảy, hãy thử nhảy múa để có được điệu nhảy
>>> gốcmer.stem('dancization')
bạn sẽ nhảy múa'
>>> gốcmer.stem('dancation')
bạn'dancat'

Đây là một sự không phù hợp ấn tượng đối với gốc "danc". Ngay cả khi tính đến việc "vũ công" không bắt nguồn từ "dance", độ chính xác tổng thể vẫn khá cao.

Tôi hy vọng điều này sẽ giúp bạn bắt đầu.

Giới thiệu về python - Xác suất đếm/tần số của các từ liên quan? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/12668861/

30 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress