如何在Python 2.x中生成词表时保留法语特殊字符
Got it, let's figure out why those French accents (é, è, etc.) are disappearing from your wordlist. The problem comes down to two Python 2.x quirks: how regex handles non-ASCII characters, and whether you're working with Unicode strings instead of byte strings. Here's how to fix it step by step:
1. Read Your File as Unicode
In Python 2, the default open() function reads files as byte strings, which can cause weird behavior with accents even if printing the raw text looks fine. Swap it out for codecs.open() so you can explicitly set the file encoding (use UTF-8 if your text file is saved that way, or cp1252 if it's a Windows-formatted file):
import codecs import re def fixCaps(w): # Keep your existing fixCaps logic here, just make sure it handles Unicode return w.capitalize() if w.islower() else w def wordlist(filename): # Use codecs.open with your file's actual encoding (adjust if needed) with codecs.open(filename, mode='r', encoding='utf-8') as f: text = f.read() print(text) # Add re.UNICODE flag so regex recognizes accented characters as word characters # Also added '-' to handle hyphenated words like au-dessus wordlist = [fixCaps(w) for w in re.findall(r"[\w'-]+|[.,!?;]", text, flags=re.UNICODE)] print(wordlist) return wordlist
2. Update Your Regex with the UNICODE Flag
The big issue here is Python 2's re module uses ASCII-only matching by default. That means \w only recognizes a-z, A-Z, 0-9, and underscores—so accents get treated as non-word characters, splitting words like dédicace into d and dicace.
Adding flags=re.UNICODE tells the regex engine to treat \w as all Unicode letter characters, which includes all those French accented letters. I also threw in - to the character class so hyphenated words (like au-dessus) don't get split apart either—bonus fix!
Why This Works
- Reading the file as a Unicode string ensures all accents are preserved from the start, no hidden byte encoding issues.
- The
re.UNICODEflag fixes the regex to actually recognize French accented characters as part of words, so they stay in your wordlist instead of getting chopped out.
Give this a test with your sample text, and you'll see dédicace, éloquence, and au-dessus show up in the wordlist exactly as they should.
内容的提问来源于stack exchange,提问作者Ncollig




