Tôi đang cố gắng tìm các thẻ (từ khóa) cho một công thức bằng cách phân tích cú pháp chuỗi văn bản dài. Các văn bản có chứa các thành phần công thức, hướng dẫn và một blurb ngắn.Kỹ thuật loại bỏ các từ phổ biến (và các phiên bản số nhiều) từ một chuỗi
Bạn nghĩ cách nào là cách hiệu quả nhất để xóa các từ phổ biến khỏi danh sách thẻ?
By từ thông dụng, tôi muốn nói những từ như: 'the', 'at', 'có', 'họ' vv
tôi có 2 phương pháp tôi có thể sử dụng, mà bạn có nghĩ là hiệu quả hơn về tốc độ và bạn có biết cách hiệu quả hơn tôi có thể làm được điều này không?
Phương pháp 1:
- Xác định số lần mỗi từ xảy ra (bằng cách sử dụng bộ sưu tập thư viện)
- Có một danh sách các từ phổ biến và loại bỏ tất cả 'Words Common' từ đối tượng Bộ sưu tập bằng cách cố gắng để xóa khóa đó từ đối tượng Bộ sưu tập nếu nó tồn tại.
- Do đó tốc độ sẽ được xác định bởi độ dài của biến delims
import collections from Counter
delim = ['there','there\'s','theres','they','they\'re']
# the above will end up being a really long list!
word_freq = Counter(recipe_str.lower().split())
for delim in set(delims):
del word_freq[delim]
return freq.most_common()
Phương pháp 2:
- Đối với những từ phổ biến mà có thể nhiều, nhìn vào mỗi từ trong chuỗi công thức, và kiểm tra xem nó một phần chứa phiên bản không số nhiều của một từ chung. Ví dụ; Đối với chuỗi "Có một bài kiểm tra", hãy kiểm tra từng từ để xem nó có chứa "đó" hay không và xóa nó nếu có.
delim = ['this','at','them'] # words that cant be plural
partial_delim = ['there','they',] # words that could occur in many forms
word_freq = Counter(recipe_str.lower().split())
for delim in set(delims):
del word_freq[delim]
# really slow
for delim in set(partial_delims):
for word in word_freq:
if word.find(delim) != -1:
del word_freq[delim]
return freq.most_common()
Tôi không thể cung cấp cho bạn câu trả lời đầy đủ ở đây, nhưng tôi muốn đề cập đến điều gì đó có thể giúp bạn. Khi thực hiện bất kỳ loại phân tích văn bản nào, bạn thường muốn có thể điều trị số nhiều, chia động từ và các biến đổi khác như tất cả liên quan đến cùng một 'từ'. Ví dụ: bạn có thể muốn xử lý delimit, delimits, delimited, delimiter, delimiters ... như nhau. Quá trình này được gọi là 'bắt nguồn' và có một số thuật toán được nghiên cứu kỹ lưỡng, với các ví dụ từ nhiều ngôn ngữ lập trình khác nhau, sẽ cố gắng thực hiện điều này cho bạn. Chúc may mắn! Ước gì tôi có thể giúp đỡ nhiều hơn. – soundslikeneon
Thực ra, tôi đề nghị khá nhiều điều ngược lại. Nếu mục đích là hoàn toàn "xóa" các từ "phổ biến" được xác định trước, tôi chỉ cần tạo danh sách đầy đủ, hoàn chỉnh với tất cả các biến thể của từng từ mà bạn muốn xóa. Đừng lo lắng về những từ nào là số nhiều trong đó. Dễ dàng hơn nhiều/nhanh hơn/ít lỗi hơn. –