Mục đích: Tôi muốn tách các từ để đếm tần suất của chúng trong tài liệu và sau đó thực hiện một số phép tính về các tần số đó.Regex cho các ký tự dấu trọng âm
Những lời có thể bắt đầu/chứa/kết thúc với bất kỳ những điều sau đây: số
- bảng chữ cái (bao gồm é, ú, ó vv nhưng không phải biểu tượng như $, #, & vv)
Những lời có thể chứa (nhưng không bắt đầu hoặc kết thúc với)
- gạch dưới (ví dụ: rishi_dua)
- dấu nháy đơn (ví dụ: có thể không)
- dấu gạch ngang (ví dụ: 123-)
Những lời có thể được ngăn cách bởi bất kỳ biểu tượng hoặc khoảng trắng như $, #, &, ký tự tab
vấn đề:
- tôi không thể tìm ra cách để phù hợp với é, ú, ó vv mà không phù hợp với ký tự đặc biệt khác .
- Điều gì sẽ là một cách hiệu quả hơn để làm điều này (không bắt buộc )
- Splitting bởi không gian đang làm việc cho tôi vào lúc này như không có khác
Những gì tôi đã cố gắng:
Cách tiếp cận: Trước tiên tôi thay thế tất cả mọi thứ trừ \ w (chữ và số cộng "_"), và - với một không gian Sau đó, tôi xóa ', _ và' nếu nó được tìm thấy tại begi nning hoặc cuối của một từ Cuối cùng tôi thay thế nhiều không gian với không gian duy nhất và chia các từ
Code: Tôi đang sử dụng một loạt các regex thay thế như sau:
$str =~ s/[^\w'-]/ /g;
#Also tried using $str =~ s/[^:alpha:0-9_'-]/ /g; but doesn't work
$str =~ s/-//;
$str =~ s/'//;
$str =~ s/_//;
$str =~ s/ -/ /;
$str =~ s/ '/ /;
$str =~ s/ _/ /;
$str =~ s/ +/ /;
foreach $word (split(' ', lc $str)) {
#do something
}
ràng buộc: Tôi phải làm điều đó trong Perl (vì đây là một phần của mã lớn hơn tôi đã viết trong Perl) nhưng tôi có thể sử dụng các tùy chọn khác ngoài Regex
@Rishi cũng hãy nhìn vào các phần mở rộng unicode perl: http://perldoc.perl.org/perlunicode.html –
@Casimir, tôi vừa thử mã của bạn. Nó không làm việc cho tôi. Theo đề xuất của Eli Algranti và Jim Monty, tôi đoán nó có liên quan đến mã hóa ký tự. Tôi sẽ đọc nó lên –
@ Rishi Dua, Làm thế nào bạn giải mã được đầu vào của bạn? – ikegami