2009-08-22 40 views
6

Giả sử tôi có danh sách tên miền mà tôi muốn phân tích. Trừ khi tên miền được gạch nối, tôi không thấy một cách đặc biệt dễ dàng để "trích xuất" các từ khóa được sử dụng trong miền. Tuy nhiên, tôi nhìn thấy nó được thực hiện trên các trang web như DomainTools.com, Estibot.com, vv Ví dụ:Lập trình trích xuất từ ​​khóa từ tên miền

ilikecheese.com becomes "i like cheese" 
sanfranciscohotels.com becomes "san francisco hotels" 
... 

Mọi góp ý cho việc này một cách hiệu quả và hiệu quả?

Chỉnh sửa: Tôi muốn viết điều này bằng PHP.

+0

Ngôn ngữ lập trình nào? – rahul

+0

PHP, đã chỉnh sửa câu hỏi của tôi để bao gồm điều đó, cảm ơn. – Kevin

+0

chạy qua chuỗi ngược lại với pspell kiểm tra - eseehc = pho mát, trừ pho mát từ chuỗi, ekil = như, trừ như từ chuỗi = như; s, sl, sle, slet, sleto, sletoh = khách sạn, trừ khách sạn ... vv bạn cũng có thể chạy nó nhiều lần và bao gồm các phát hiện cuối cùng mà không xóa chúng. chuỗi đảo ngược pspell là một cách rất dễ dàng để tìm các từ "thực" trong bất kỳ ngôn ngữ nào. – Tobias

Trả lời

6

Ok, tôi đã chạy tập lệnh mà tôi đã viết cho this SO question, với một vài thay đổi nhỏ - sử dụng xác suất nhật ký để tránh bị tràn và sửa đổi tệp để đọc nhiều tệp dưới dạng tệp phụ.

Đối với kho dữ liệu của tôi, tôi đã tải xuống một loạt tệp từ dự án Gutenberg - không có phương pháp thực sự nào, chỉ cần lấy tất cả các tệp tiếng Anh từ etext00, etext01 và etext02.

Dưới đây là kết quả, tôi đã lưu ba kết quả hàng đầu cho mỗi kết hợp.

 
expertsexchange: 97 possibilities 
- experts exchange -23.71 
- expert sex change -31.46 
- experts ex change -33.86 

penisland: 11 possibilities 
- pen island -20.54 
- penis land -22.64 
- pen is land -25.06 

choosespain: 28 possibilities 
- choose spain -21.17 
- chooses pain -23.06 
- choose spa in -29.41 

kidsexpress: 15 possibilities 
- kids express -23.56 
- kid sex press -32.65 
- kids ex press -34.98 

childrenswear: 34 possibilities 
- children swear -19.85 
- childrens wear -25.26 
- child ren swear -32.70 

dicksonweb: 8 possibilities 
- dickson web -27.09 
- dick son web -30.51 
- dicks on web -33.63 
+0

Có vẻ như người duy nhất không vượt qua là "quần áo trẻ em", nhưng tôi đã không mong đợi tự động hóa này chính xác 100%. Và tôi đồng ý, bạn xứng đáng nhận được tiền thưởng :) Bạn có phiền khi đăng nguồn với những thay đổi của mình không? – Kevin

+0

Về cơ bản giống như trên blog của tôi - chỉ cần thay thế phép nhân trong find_word_seq_score bằng '$ score + = log ($ DICT- > {$ _}/$ TOTAL); ' – SquareCog

+0

um > được cho là lớn hơn ký tên. – SquareCog

0

Bạn sẽ phải sử dụng công cụ từ điển chống lại mục nhập tên miền để tìm các từ hợp lệ và chạy công cụ từ điển đó dựa trên kết quả để đảm bảo kết quả là từ hợp lệ.

+0

Ví dụ về cách thực hiện việc này? – Kevin

+0

Bạn cần có danh sách từ điển. Sau đó, bạn cần phải chuyển đổi danh sách đó thành một định dạng thân thiện với bạn cho dù đó là một mảng của một cú pháp nhất định, một danh sách csv hoặc những gì bao giờ hết. Sau đó, bạn cần viết một chương trình đánh giá mục nhập tên miền của bạn dựa vào danh sách đó. –

1

Nếu bạn có danh sách các từ hợp lệ, bạn có thể lặp qua chuỗi miền của mình và cố gắng cắt từng từ hợp lệ mỗi lần bằng thuật toán backtracking. Nếu bạn quản lý để sử dụng hết tất cả các từ, bạn đã hoàn thành. Hãy nhận biết rằng thời gian phức tạp của việc này là không tối ưu :)

+1

Không được nói là tai hại. – Dykam

+0

Đúng, nhưng điều này có thể đã được triển khai trong một giờ và anh ta đã có năm ngày trước khi chia tách tên miền của thế giới :) – Zed

2

choosespain.com kidsexpress.com childrenswear.com dicksonweb.com

Hãy vui vẻ (và một luật sư tốt) nếu bạn đang đi để cố gắng phân tích cú pháp url bằng một từ điển.

Bạn có thể làm tốt hơn nếu bạn có thể tìm thấy các ký tự giống nhau nhưng được phân tách bằng khoảng trắng trên trang web của họ.

Các khả năng khác: trích xuất dữ liệu từ chứng chỉ ssl; truy vấn máy chủ tên miền cấp cao nhất; Truy cập máy chủ tên miền (TLD); hoặc sử dụng một trong những công cụ hoặc dịch vụ "whois" (chỉ cần google "whois").

+0

Các miền tôi đang phân tích thường không có trang web. Tôi không chắc chắn những gì bạn có nghĩa là bằng cách sử dụng DNS/whois để tìm các từ khóa được sử dụng trong các lĩnh vực. – Kevin

+1

đừng quên penisland.com;) –

+0

@Kevin. Lưu lượng truy cập trên internet không được định tuyến bằng tên nhưng sử dụng địa chỉ IP, ví dụ: 213.171.218.121. Một máy chủ tên miền dịch tên thành địa chỉ IP. TLD là máy chủ tên miền cấp cao nhất. Để có được một tên miền, một công ty phải đăng ký và có nhiều cách để nắm giữ một số thông tin đó. Rõ ràng điều này không đúng đối với các miền trên mạng riêng vì vậy nó có thể không áp dụng được cho những gì bạn đang cố gắng làm. – Dipstick

3

Có thể muốn xem this SO question.

+0

Đây là gần nhất tôi đã nhìn thấy một giải pháp :) Bounty là teetering theo hướng của bạn. – Kevin

+1

Dude, mà nên như vậy tiền thưởng của tôi :-) Tôi đoán tôi sẽ chạy kịch bản perl và cho bạn biết những gì nó chiết xuất .. – SquareCog

3

Bạn cần phát triển một phỏng đoán sẽ có khả năng khớp với tên miền. Cách tôi sẽ làm điều đó là lần đầu tiên tìm thấy một văn bản lớn của văn bản. Ví dụ: bạn có thể tải xuống Wikipedia.

Tiếp theo lấy kho dữ liệu của bạn và kết hợp hai từ liền kề nhau. Ví dụ, nếu câu của bạn là:

quick brown fox jumps over the lazy dog 

Bạn sẽ tạo một danh sách:

quickbrown 
brownfox 
foxjumps 
jumpsover 
overthe 
thelazy 
lazydog 

Mỗi trong số này sẽ có một số một. Khi bạn phân tích cú pháp của bạn, bạn sẽ theo dõi các cặp tần số của mỗi hai từ. Ngoài ra, đối với mỗi cặp, bạn sẽ cần phải sắp xếp hai từ gốc là gì.

Sắp xếp danh sách này theo tần suất và sau đó tìm cách tìm các kết quả phù hợp trong miền của bạn dựa trên những từ này.

Cuối cùng, hãy kiểm tra tên miền cho hai cụm từ đầu không được đăng ký!

Tôi nghĩ các trang web như DomainTool có danh sách các từ xếp hạng cao nhất. Sau đó, họ cố phân tích những từ này ra trước. Tùy thuộc vào mục đích, bạn có thể muốn xem xét việc sử dụng MTurk để thực hiện công việc. Những người khác nhau sẽ phân tích các từ giống nhau một cách khác nhau và có thể không làm như vậy tương ứng với mức độ phổ biến của các từ.

+0

Tôi không chắc chắn MTurk sẽ là công cụ thích hợp cho công việc như tôi sẽ xử lý hàng nghìn tên miền mỗi ngày. Tuy nhiên, tôi thích phương pháp bạn đề xuất! – Kevin

+0

Thuật toán Viterbi có lẽ tốt hơn nhiều so với thuật toán tôi đề xuất. WRT, MTurk, nó phụ thuộc vào giá trị mà từ của bạn chia nhỏ thêm. Bạn có thể có một hit MTurk để chia 10 tác phẩm, và bạn có thể tốn 0,01 đô la. Đó là khoảng 15 đô la cho mỗi 1.000 tên. Nếu trang web 'thay đổi giới tính chuyên gia' đã thử nghiệm tên miền của họ một chút trước tiên, họ có thể đã bắt đầu bằng dấu gạch nối ở giữa. – brianegge

1
function getwords($string) { 
    if(strpos($string,"xn--") !== false) { 
     return false; 
    } 
    $string = trim(str_replace('-', '', $string)); 
    $pspell = pspell_new('en'); 
    $check = array(); 
    $words = array(); 
    for($j = 0; $j < (strlen($string) - 5); $j++) { 
     for($i = 4; $i < strlen($string); $i++) { 
      if(pspell_check($pspell, substr($string, $j, $i))) { 
       $check[$j]++; 
       $words[] = substr($string, $j, $i); 
      } 
     } 
    } 
    $words = array_unique($words); 
    if(count($check) > 0) { 
     return $words; 
    } 
    return false; 
} 

print_r(getwords('ilikecheesehotels')); 

Array 
(
    [0] => like 
    [1] => cheese 
    [2] => hotel 
    [3] => hotels 
) 

như một sự khởi đầu đơn giản với pspell. bạn có thể muốn so sánh kết quả và xem liệu bạn có lấy cuống của một từ không có chữ "s" ở cuối và hợp nhất chúng hay không.

Các vấn đề liên quan