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): http://norvig.com/ngrams/

Và đây là liên kết đến mã: http://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)<=L."
    return [(text[:i+1], text[i+1:]) 
            for i in range(min(len(text), L))]

def Pwords(words): 
    "The Naive Bayes probability of a sequence of words."
    return product(Pw(w) for w in words)

#### Support functions (p. 224)

def product(nums):
    "Return the product of a sequence of numbers."
    return reduce(operator.mul, nums, 1)

class Pdist(dict):
    "A probability distribution estimated from counts in datafile."
    def __init__(self, data=[], N=None, missingfn=None):
        for key,count in data:
            self[key] = self.get(key, 0) + int(count)
        self.N = float(N or sum(self.itervalues()))
        self.missingfn = missingfn or (lambda k, N: 1./N)
    def __call__(self, key): 
        if key in self: return self[key]/self.N  
        else: return self.missingfn(key, self.N)

def datafile(name, sep='\t'):
    "Read key,value pairs from file."
    for line in file(name):
        yield line.split(sep)

def avoid_long_words(key, N):
    "Estimate the probability of an unknown word."
    return 10./(N * 10**len(key))

N = 1024908267229 ## Number of tokens

Pw  = Pdist(datafile('count_1w.txt'), N, avoid_long_words)

#### segment2: second version, with bigram counts, (p. 226-227)

def cPw(word, prev):
    "Conditional probability of word, given previous word."
    try:
        return P2w[prev + ' ' + word]/float(Pw[prev])
    except KeyError:
        return Pw(word)

P2w = Pdist(datafile('count_2w.txt'), N)

@memo 
def segment2(text, prev=''): 
    "Return (log P(words), words), where words is the best segmentation." 
    if not text: return 0.0, [] 
    candidates = [combine(log10(cPw(first, prev)), first, segment2(rem, first)) 
                  for first,rem in splits(text)] 
    return max(candidates) 

def combine(Pfirst, first, (Prem, rem)): 
    "Combine first and rem results into one (probability, words) pair." 
    return Pfirst+Prem, [first]+rem 

Sử dụng danh sách hiểu để lặp lại trong danh sách ..

Trên mỗi lần lặp, sử dụng str. Phương thức dải () để loại bỏ khoảng trắng hàng đầu và dấu vết ..

Làm thế nào để bạn chia một chuỗi trong Python mà không bị chia tách?

& nbsp;Những cách khác để phân tách một chuỗi mà không sử dụng phương thức chia () là gì ?.

Vòng qua các chuỗi. ....

& nbsp;Tạo một chuỗi mới để theo dõi từ hiện tại (từ) ..

Vòng qua các ký tự trong mỗi chuỗi này ..

& nbsp;
>>> chom = ' colorless     green \n\tideas\n'       # ' ', '\n', '\t' bunched up
>>> print(chom)
 colorless     green 
	ideas
 
>>> chom.split()
['colorless', 'green', 'ideas'] 

Chia tách trên một nền tảng cụ thể

Bằng cách cung cấp một tham số tùy chọn, .Split ('x') có thể được sử dụng để phân chia một chuỗi trên một chuỗi con cụ thể 'X'. Không có 'X' được chỉ định, .Split () chỉ cần chia trên tất cả khoảng trắng, như đã thấy ở trên.

& nbsp;
>>> mary = 'Mary had a little lamb'
>>> mary.split('a')                 # splits on 'a'
['M', 'ry h', 'd ', ' little l', 'mb'] 
>>> hi = 'Hello mother,\nHello father.'
>>> print(hi)
Hello mother,
Hello father. 
>>> hi.split()                # no parameter given: splits on whitespace
['Hello', 'mother,', 'Hello', 'father.'] 
>>> hi.split('\n')                 # splits on '\n' only
['Hello mother,', 'Hello father.'] 

Chuỗi thành danh sách các ký tự: list ()

Nhưng nếu bạn muốn chia một chuỗi thành một danh sách các ký tự? Trong Python, các ký tự chỉ đơn giản là các chuỗi có độ dài 1. Hàm danh sách () biến một chuỗi thành một danh sách các chữ cái riêng lẻ:

& nbsp;
>>> mary = 'Mary had a little lamb'
>>> mary.split('a')                 # splits on 'a'
['M', 'ry h', 'd ', ' little l', 'mb'] 
>>> hi = 'Hello mother,\nHello father.'
>>> print(hi)
Hello mother,
Hello father. 
>>> hi.split()                # no parameter given: splits on whitespace
['Hello', 'mother,', 'Hello', 'father.'] 
>>> hi.split('\n')                 # splits on '\n' only
['Hello mother,', 'Hello father.'] 

Chuỗi thành danh sách các ký tự: list ()

Nhưng nếu bạn muốn chia một chuỗi thành một danh sách các ký tự? Trong Python, các ký tự chỉ đơn giản là các chuỗi có độ dài 1. Hàm danh sách () biến một chuỗi thành một danh sách các chữ cái riêng lẻ:

>>> list('hello world')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] 

& nbsp;
>>> mary = 'Mary had a little lamb'
>>> mary.split('a')                 # splits on 'a'
['M', 'ry h', 'd ', ' little l', 'mb'] 
>>> hi = 'Hello mother,\nHello father.'
>>> print(hi)
Hello mother,
Hello father. 
>>> hi.split()                # no parameter given: splits on whitespace
['Hello', 'mother,', 'Hello', 'father.'] 
>>> hi.split('\n')                 # splits on '\n' only
['Hello mother,', 'Hello father.'] 

Chuỗi thành danh sách các ký tự: list ()

& nbsp;
>>> '--'.join(mwords)
'Mary--had--a--little--lamb' 
>>> '\t'.join(mwords)
'Mary\thad\ta\tlittle\tlamb' 
>>> print('\t'.join(mwords))
Mary    had     a       little  lamb 

Phương thức cũng có thể được gọi trên chuỗi trống '' làm dấu phân cách. Hiệu ứng là các yếu tố trong danh sách được nối với nhau mà không có gì ở giữa. Dưới đây, một danh sách các ký tự được đặt lại với nhau vào chuỗi ban đầu:

& nbsp;________số 8

Làm thế nào để bạn chia văn bản bằng các từ trong Python?

Phương thức phân chia chuỗi python Một chuỗi có thể được chia thành các chuỗi con bằng phương thức Split (param). Phương pháp này là một phần của đối tượng chuỗi. Tham số là tùy chọn, nhưng bạn có thể phân chia trên một chuỗi hoặc ký tự cụ thể. Cho một câu, chuỗi có thể được chia thành các từ.using the split(param) method. This method is part of the string object. The parameter is optional, but you can split on a specific string or character. Given a sentence, the string can be split into words.

Làm thế nào để bạn loại bỏ một khoảng trống từ một sự phân chia trong Python?

Để phân chia một chuỗi và loại bỏ khoảng trắng:..
Sử dụng str.phương thức chia () để chia chuỗi thành một danh sách ..
Sử dụng danh sách hiểu để lặp lại trong danh sách ..
Trên mỗi lần lặp, sử dụng str.Phương thức dải () để loại bỏ khoảng trắng hàng đầu và dấu vết ..

Làm thế nào để bạn chia một chuỗi trong Python mà không bị chia tách?

Những cách khác để phân tách một chuỗi mà không sử dụng phương thức chia () là gì ?..
Vòng qua các chuỗi.....
Tạo một chuỗi mới để theo dõi từ hiện tại (từ) ..
Vòng qua các ký tự trong mỗi chuỗi này ..

Làm cách nào để loại bỏ không gian in trong Python?

Trong Python, có nhiều cách bạn có thể thay thế các không gian trống:..
strip().
replace().
tham gia () với str.tách ra().
translate().
lại.sub ().