Hướng dẫn python split words without spaces - python chia từ không có dấu cách

Câu trả lời của con người chung chung là tuyệt vời. Nhưng việc thực hiện tốt nhất về điều này mà tôi từng thấy là viết chính Peter Norvig trong cuốn sách 'Dữ liệu đẹp' của mình.

Trước khi tôi dán mã của anh ấy, hãy để tôi mở rộng về lý do tại sao phương pháp của Norvig chính xác hơn [mặc dù chậm hơn một chút và lâu hơn về mã].

  1. Dữ liệu tốt hơn một chút - cả về kích thước và về độ chính xác [anh ta sử dụng số từ thay vì xếp hạng đơn giản]
  2. Quan trọng hơn, đó là logic đằng sau N-gram thực sự làm cho cách tiếp cận rất chính xác.

Ví dụ anh ấy cung cấp trong cuốn sách của mình là vấn đề chia một chuỗi 'sitdown'. Bây giờ, một phương thức phân chia chuỗi không phải là Bigram sẽ xem xét P ['SIT'] * P ['Down'] và nếu điều này ít hơn P ['SITDOWN'] - sẽ là trường hợp khá thường xuyên - nó sẽ không chia tách Nó, nhưng chúng tôi muốn nó [hầu hết thời gian].

Tuy nhiên, khi bạn có mô hình bigram, bạn có thể coi trọng P ['ngồi xuống'] với tư cách là một bigram vs p ['sitdown'] và các chiến thắng trước đây. Về cơ bản, nếu bạn không sử dụng các bigram, nó sẽ coi xác suất của các từ bạn đang phân tách là độc lập, đó không phải là trường hợp, một số từ có nhiều khả năng xuất hiện lần lượt. Thật không may, đó cũng là những từ thường bị mắc kẹt với nhau trong rất nhiều trường hợp và nhầm lẫn bộ chia.

Dưới đây là liên kết đến dữ liệu [dữ liệu cho 3 vấn đề và phân đoạn riêng biệt chỉ là một. Vui lòng đọc chương để biết chi tiết]: //norvig.com/ngrams/

Và đây là liên kết đến mã: //norvig.com/ngrams/ngrams.py

Các liên kết này đã được tăng một thời gian, nhưng tôi sẽ sao chép phần phân đoạn của mã ở đây

import re, string, random, glob, operator, heapq
from collections import defaultdict
from math import log10

def memo[f]:
    "Memoize function f."
    table = {}
    def fmemo[*args]:
        if args not in table:
            table[args] = f[*args]
        return table[args]
    fmemo.memo = table
    return fmemo

def test[verbose=None]:
    """Run some tests, taken from the chapter.
    Since the hillclimbing algorithm is randomized, some tests may fail."""
    import doctest
    print 'Running tests...'
    doctest.testfile['ngrams-test.txt', verbose=verbose]

################ Word Segmentation [p. 223]

@memo
def segment[text]:
    "Return a list of words that is the best segmentation of text."
    if not text: return []
    candidates = [[first]+segment[rem] for first,rem in splits[text]]
    return max[candidates, key=Pwords]

def splits[text, L=20]:
    "Return a list of all possible [first, rem] pairs, len[first]

Bài Viết Liên Quan

Chủ Đề