├── .github └── workflows │ ├── codeql-analysis.yml │ └── python-package.yml ├── .gitignore ├── CHANGES.txt ├── LICENSE.txt ├── README.md ├── cleanco ├── __init__.py ├── classify.py ├── clean.py ├── non_nfkd_map.py └── termdata.py ├── setup.cfg ├── setup.py ├── tests ├── README.txt ├── __init__.py ├── companies.csv └── test_cleanname.py └── tox.ini /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '25 0 * * 4' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | 28 | strategy: 29 | fail-fast: false 30 | matrix: 31 | language: [ 'python' ] 32 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 33 | # Learn more: 34 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 35 | 36 | steps: 37 | - name: Checkout repository 38 | uses: actions/checkout@v2 39 | 40 | # Initializes the CodeQL tools for scanning. 41 | - name: Initialize CodeQL 42 | uses: github/codeql-action/init@v1 43 | with: 44 | languages: ${{ matrix.language }} 45 | # If you wish to specify custom queries, you can do so here or in a config file. 46 | # By default, queries listed here will override any specified in a config file. 47 | # Prefix the list here with "+" to use these queries and those in the config file. 48 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 49 | 50 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 51 | # If this step fails, then you should remove it and run the build manually (see below) 52 | - name: Autobuild 53 | uses: github/codeql-action/autobuild@v1 54 | 55 | # ℹ️ Command-line programs to run using the OS shell. 56 | # 📚 https://git.io/JvXDl 57 | 58 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 59 | # and modify them (or add more) to build your code if your project 60 | # uses a compiled language 61 | 62 | #- run: | 63 | # make bootstrap 64 | # make release 65 | 66 | - name: Perform CodeQL Analysis 67 | uses: github/codeql-action/analyze@v1 68 | -------------------------------------------------------------------------------- /.github/workflows/python-package.yml: -------------------------------------------------------------------------------- 1 | # This workflow will install Python dependencies, run tests and lint with a variety of Python versions 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions 3 | 4 | name: Python package 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | strategy: 17 | matrix: 18 | python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] 19 | 20 | steps: 21 | - uses: actions/checkout@v4 22 | - name: Set up Python ${{ matrix.python-version }} 23 | uses: actions/setup-python@v4 24 | with: 25 | python-version: ${{ matrix.python-version }} 26 | - name: Install dependencies 27 | run: | 28 | python -m pip install --upgrade pip 29 | python -m pip install flake8 pytest 30 | if [ -f requirements.txt ]; then pip install -r requirements.txt; fi 31 | - name: Lint with flake8 32 | run: | 33 | # stop the build if there are Python syntax errors or undefined names 34 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics 35 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide 36 | flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 37 | - name: Test with pytest 38 | run: | 39 | pytest 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | *.egg-info/ 23 | .installed.cfg 24 | *.egg 25 | 26 | # PyInstaller 27 | # Usually these files are written by a python script from a template 28 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 29 | *.manifest 30 | *.spec 31 | 32 | # Installer logs 33 | pip-log.txt 34 | pip-delete-this-directory.txt 35 | 36 | # Unit test / coverage reports 37 | htmlcov/ 38 | .tox/ 39 | .coverage 40 | .coverage.* 41 | .cache 42 | nosetests.xml 43 | coverage.xml 44 | *,cover 45 | 46 | # Translations 47 | *.mo 48 | *.pot 49 | 50 | # Django stuff: 51 | *.log 52 | 53 | # Sphinx documentation 54 | docs/_build/ 55 | 56 | # PyBuilder 57 | target/ 58 | 59 | # MacOS 60 | 61 | .DS_Store 62 | 63 | # Pycharm 64 | .idea -------------------------------------------------------------------------------- /CHANGES.txt: -------------------------------------------------------------------------------- 1 | Changelog 2 | ********** 3 | 4 | 2.4 (unreleased) 5 | ----------------- 6 | 7 | - Nothing yet 8 | 9 | 2.3 (2024-05-15) 10 | ----------------- 11 | 12 | - Suffix and term improvements 13 | - Support Python 3.8-3.12 14 | 15 | 2.2 (2021-11-16) 16 | ----------------- 17 | 18 | - Terms no longer need to be explicitly passed to basename() 19 | - New custom_basename() can be used with custom terms 20 | - prepare_terms() was renamed to prepare_default_terms() 21 | - Tests were simplified 22 | - Old class based API was removed 23 | 24 | 2.1 (2021-01-30) 25 | ---------------- 26 | 27 | - Support Python 3.6 - 3.9 28 | - Fix basename() so it works deterministically 29 | - Improve basename() so it ignores punctuation for matching terms 30 | - Fix normalization of some Unicode characters 31 | - Fix an error when basename() is invoked with middle=True kwarg 32 | - Drop Travis CI in favour of Github actions 33 | 34 | 35 | 2.0.1 (2020-04-26) 36 | ------------------- 37 | 38 | - Read README.md into pkg description 39 | 40 | 2.0.0 (2020-04-26) 41 | ------------------- 42 | 43 | - Major refactoring & cleanup (e.g. #16) 44 | - Optimizations (#31) 45 | - New improved API (start deprecating old) 46 | - Python3 only (#46) 47 | - Better Unicode matching (#45) 48 | - Switch to YYYY-MM-DD version timestamps 49 | 50 | 1.3 (9.9. 2015) 51 | ---------------- 52 | 53 | - Switch to setuptools 54 | - Support unicode input 55 | 56 | 1.2.1 (2.9. 2015) 57 | ------------------ 58 | 59 | - Fix stupid indentation bug (blush) 60 | - Fix broken 1.2 speedup logic; move to module level 61 | 62 | 1.2 (2.9. 2015) 63 | ---------------- 64 | 65 | - Major speedup by moving logic to class 66 | constructor 67 | - Improved readme 68 | 69 | 1.1 (24.8. 2015) 70 | ----------------- 71 | 72 | - Support prefixed and in-middle terms 73 | - Support multiple terms per name 74 | - Cleanup & refactoring 75 | - First PyPI release 76 | 77 | 1.0 (Mar 20, 2014) 78 | ------------------- 79 | 80 | - GitHub release 81 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Paul Solin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cleanco - clean organization names 2 | 3 | ![Python package](https://github.com/psolin/cleanco/workflows/Python%20package/badge.svg) 4 | ![CodeQL](https://github.com/psolin/cleanco/workflows/CodeQL/badge.svg) 5 | 6 | ## What is it / what does it do? 7 | 8 | This is a Python package that processes company names, providing cleaned versions of the 9 | names by stripping away terms indicating organization type (such as "Ltd." or "Corp"). 10 | 11 | Using a database of organization type terms, It also provides an utility to deduce the 12 | type of organization, in terms of US/UK business entity types (ie. "limited liability 13 | company" or "non-profit"). 14 | 15 | Finally, the system uses the term information to suggest countries the organization could 16 | be established in. For example, the term "Oy" in company name suggests it is established 17 | in Finland, whereas "Ltd" in company name could mean UK, US or a number of other 18 | countries. 19 | 20 | ## How do I install it? 21 | Just use 'pip install cleanco' if you have pip installed (as most systems do). Or download the zip distribution from this site, unzip it and then: 22 | 23 | * Mac: `cd` into it, and enter `sudo python setup.py install` along with your system password. 24 | * Windows: Same thing but without `sudo`. 25 | 26 | ## How does it work? 27 | Let's look at some sample code. To get the base name of a business without legal suffix: 28 | 29 | >>> from cleanco import basename 30 | >>> business_name = "Some Big Pharma, LLC" 31 | >>> basename(business_name) 32 | >>> 'Some Big Pharma' 33 | 34 | Note that sometimes a name may have e.g. two different suffixes after one another. The cleanco 35 | term data covers many of these, but you may want to run `basename()` twice on the name, just in case. 36 | 37 | If you want to use your custom terms, please see `custom_basename()` that also provides some other ways to adjust how base name is produced. 38 | 39 | To get the business type or country: 40 | 41 | >>> from cleanco import typesources, matches 42 | >>> classification_sources = typesources() 43 | >>> matches("Some Big Pharma, LLC", classification_sources) 44 | ['Limited Liability Company'] 45 | 46 | To get the possible countries of jurisdiction: 47 | 48 | >>> from cleanco import countrysources, matches 49 | >>> classification_sources = countrysources() 50 | >>> matches("Some Big Pharma, LLC", classification_sources) ´ 51 | ['United States of America', 'Philippines'] 52 | 53 | 54 | ## Are there bugs? 55 | See the issue tracker. If you find a bug or have enhancement suggestion or question, please file an issue and provide a PR if you can. For example, some of the company suffixes may be incorrect or there may be suffixes missing. 56 | 57 | To run tests, simply install the package and run `python setup.py test`. To run tests on multiple Python versions, install `tox` and run it (see the provided tox.ini). 58 | 59 | ## Special thanks to: 60 | 61 | - Wikipedia's [Types of Business Entity article](http://en.wikipedia.org/wiki/Types_of_business_entity), where I spent hours of research. 62 | - Contributors: [Petri Savolainen](https://github.com/petri) 63 | -------------------------------------------------------------------------------- /cleanco/__init__.py: -------------------------------------------------------------------------------- 1 | from .clean import prepare_default_terms, basename 2 | from .classify import typesources, countrysources, matches 3 | -------------------------------------------------------------------------------- /cleanco/classify.py: -------------------------------------------------------------------------------- 1 | """ 2 | Functions to help classify business names by country or type, based on legal terms. 3 | 4 | Examples of use: 5 | 6 | >> # check name for its possible business type(s) 7 | >> classification_sources = typesources() 8 | >> matches("MyCompany Ltd", classification_sources) 9 | ['Limited'] 10 | >> 11 | 12 | >> # check name for its possible jurisdictions, usually countries 13 | >> classification_sources = countrysources() 14 | >> matches("MyCompany Ltd", classification_sources) 15 | ['New Zealand', 'United Kingdom', 'United States of America'] 16 | >> 17 | 18 | """ 19 | 20 | from .termdata import terms_by_country, terms_by_type 21 | from .clean import strip_tail, normalized 22 | 23 | 24 | def typesources(): 25 | "business types / abbreviations sorted by length of business type" 26 | types = [] 27 | for business_type in terms_by_type: 28 | for item in terms_by_type[business_type]: 29 | types.append((business_type, item)) 30 | 31 | return sorted(types, key=lambda part: len(part[1]), reverse=True) 32 | 33 | 34 | def countrysources(): 35 | "business countries / type abbreviations sorted by length of type abbreviations" 36 | countries = [] 37 | for country in terms_by_country: 38 | for item in terms_by_country[country]: 39 | countries.append((country, item)) 40 | 41 | return sorted(countries, key=lambda part: len(part[1]), reverse=True) 42 | 43 | 44 | def matches(name, sources): 45 | "get types or countries matching with the legal terms in name" 46 | 47 | name = strip_tail(name) 48 | parts = name.split() 49 | nparts = [normalized(p) for p in parts] 50 | matches = [] 51 | for classifier, term in sources: 52 | nterm = normalized(term) 53 | try: 54 | idx = nparts.index(nterm) 55 | except ValueError: 56 | pass 57 | else: 58 | matches.append(classifier) 59 | 60 | return matches 61 | 62 | -------------------------------------------------------------------------------- /cleanco/clean.py: -------------------------------------------------------------------------------- 1 | """Functions to help clean & normalize business names. 2 | 3 | See http://www.unicode.org/reports/tr15/#Normalization_Forms_Table for details 4 | on Unicode normalization and the NFKD normalization used here. 5 | 6 | Basic usage: 7 | 8 | >> terms = prepare_default_terms() 9 | >> basename("Daddy & Sons, Ltd.", terms, prefix=True, middle=True, suffix=True) 10 | Daddy & Sons 11 | 12 | """ 13 | 14 | import functools 15 | import operator 16 | from collections import OrderedDict 17 | import re 18 | import unicodedata 19 | from .termdata import terms_by_type, terms_by_country 20 | from .non_nfkd_map import NON_NFKD_MAP 21 | 22 | tail_removal_rexp = re.compile(r"[^\.\w]+$", flags=re.UNICODE) 23 | 24 | 25 | def get_unique_terms(): 26 | "retrieve all unique terms from termdata definitions" 27 | ts = functools.reduce(operator.iconcat, terms_by_type.values(), []) 28 | cs = functools.reduce(operator.iconcat, terms_by_country.values(), []) 29 | return set(ts + cs) 30 | 31 | 32 | def remove_accents(t): 33 | """based on https://stackoverflow.com/a/51230541""" 34 | nfkd_form = unicodedata.normalize('NFKD', t.casefold()) 35 | return ''.join( 36 | NON_NFKD_MAP[c] 37 | if c in NON_NFKD_MAP 38 | else c 39 | for part in nfkd_form for c in part 40 | if unicodedata.category(part) != 'Mn' 41 | ) 42 | 43 | 44 | def strip_punct(t): 45 | return t.replace(".", "").replace(",", "").replace("-", "") 46 | 47 | 48 | def normalize_terms(terms): 49 | "normalize terms" 50 | return (strip_punct(remove_accents(t)) for t in terms) 51 | 52 | 53 | def strip_tail(name): 54 | "get rid of all trailing non-letter symbols except the dot" 55 | match = re.search(tail_removal_rexp, name) 56 | if match is not None: 57 | name = name[: match.span()[0]] 58 | return name 59 | 60 | 61 | def normalized(text): 62 | "caseless Unicode normalization" 63 | return remove_accents(text) 64 | 65 | 66 | def prepare_default_terms(): 67 | "construct an optimized term structure for basename extraction" 68 | terms = get_unique_terms() 69 | nterms = normalize_terms(terms) 70 | ntermparts = (t.split() for t in nterms) 71 | # make sure that the result is deterministic, sort terms descending by number of tokens, ascending by names 72 | sntermparts = sorted(ntermparts, key=lambda x: (-len(x), x)) 73 | return [(len(tp), tp) for tp in sntermparts] 74 | 75 | 76 | def custom_basename(name, terms, suffix=True, prefix=False, middle=False, **kwargs): 77 | "return cleaned base version of the business name" 78 | 79 | name = strip_tail(name) 80 | nparts = name.split() 81 | nname = normalized(name) 82 | nnparts = list(map(strip_punct, nname.split())) 83 | nnsize = len(nnparts) 84 | 85 | if suffix: 86 | for termsize, termparts in terms: 87 | if nnparts[-termsize:] == termparts: 88 | del nnparts[-termsize:] 89 | del nparts[-termsize:] 90 | 91 | if prefix: 92 | for termsize, termparts in terms: 93 | if nnparts[:termsize] == termparts: 94 | del nnparts[:termsize] 95 | del nparts[:termsize] 96 | 97 | if middle: 98 | for termsize, termparts in terms: 99 | if termsize > 1: 100 | sizediff = nnsize - termsize 101 | if sizediff > 1: 102 | for i in range(0, nnsize-termsize+1): 103 | if termparts == nnparts[i:i+termsize]: 104 | del nnparts[i:i+termsize] 105 | del nparts[i:i+termsize] 106 | else: 107 | if termparts[0] in nnparts[1:-1]: 108 | idx = nnparts[1:-1].index(termparts[0]) 109 | del nnparts[idx+1] 110 | del nparts[idx+1] 111 | 112 | 113 | return strip_tail(" ".join(nparts)) 114 | 115 | 116 | # convenience for most common use cases that don't parametrize base name extraction 117 | basename = functools.partial(custom_basename, terms=prepare_default_terms()) 118 | -------------------------------------------------------------------------------- /cleanco/non_nfkd_map.py: -------------------------------------------------------------------------------- 1 | # from https://stackoverflow.com/a/51230541 2 | NON_NFKD_MAP = { 3 | u"\u0181": u"B", 4 | u"\u1d81": u"d", 5 | u"\u1d85": u"l", 6 | u"\u1d89": u"r", 7 | u"\u028b": u"v", 8 | u"\u1d8d": u"x", 9 | u"\u1d83": u"g", 10 | u"\u0191": u"F", 11 | u"\u0199": u"k", 12 | u"\u019d": u"N", 13 | u"\u0220": u"N", 14 | u"\u01a5": u"p", 15 | u"\u0224": u"Z", 16 | u"\u0126": u"H", 17 | u"\u01ad": u"t", 18 | u"\u01b5": u"Z", 19 | u"\u0234": u"l", 20 | u"\u023c": u"c", 21 | u"\u0240": u"z", 22 | u"\u0142": u"l", 23 | u"\u0244": u"U", 24 | u"\u2c60": u"L", 25 | u"\u0248": u"J", 26 | u"\ua74a": u"O", 27 | u"\u024c": u"R", 28 | u"\ua752": u"P", 29 | u"\ua756": u"Q", 30 | u"\ua75a": u"R", 31 | u"\ua75e": u"V", 32 | u"\u0260": u"g", 33 | u"\u01e5": u"g", 34 | u"\u2c64": u"R", 35 | u"\u0166": u"T", 36 | u"\u0268": u"i", 37 | u"\u2c66": u"t", 38 | u"\u026c": u"l", 39 | u"\u1d6e": u"f", 40 | u"\u1d87": u"n", 41 | u"\u1d72": u"r", 42 | u"\u2c74": u"v", 43 | u"\u1d76": u"z", 44 | u"\u2c78": u"e", 45 | u"\u027c": u"r", 46 | u"\u1eff": u"y", 47 | u"\ua741": u"k", 48 | u"\u0182": u"B", 49 | u"\u1d86": u"m", 50 | u"\u0288": u"t", 51 | u"\u018a": u"D", 52 | u"\u1d8e": u"z", 53 | u"\u0111": u"d", 54 | u"\u0290": u"z", 55 | u"\u0192": u"f", 56 | u"\u1d96": u"i", 57 | u"\u019a": u"l", 58 | u"\u019e": u"n", 59 | u"\u1d88": u"p", 60 | u"\u02a0": u"q", 61 | u"\u01ae": u"T", 62 | u"\u01b2": u"V", 63 | u"\u01b6": u"z", 64 | u"\u023b": u"C", 65 | u"\u023f": u"s", 66 | u"\u0141": u"L", 67 | u"\u0243": u"B", 68 | u"\ua745": u"k", 69 | u"\u0247": u"e", 70 | u"\ua749": u"l", 71 | u"\u024b": u"q", 72 | u"\ua74d": u"o", 73 | u"\u024f": u"y", 74 | u"\ua751": u"p", 75 | u"\u0253": u"b", 76 | u"\ua755": u"p", 77 | u"\u0257": u"d", 78 | u"\ua759": u"q", 79 | u"\xd8": u"O", 80 | u"\u2c63": u"P", 81 | u"\u2c67": u"H", 82 | u"\u026b": u"l", 83 | u"\u1d6d": u"d", 84 | u"\u1d71": u"p", 85 | u"\u0273": u"n", 86 | u"\u1d75": u"t", 87 | u"\u1d91": u"d", 88 | u"\xf8": u"o", 89 | u"\u2c7e": u"S", 90 | u"\u1d7d": u"p", 91 | u"\u2c7f": u"Z", 92 | u"\u0183": u"b", 93 | u"\u0187": u"C", 94 | u"\u1d80": u"b", 95 | u"\u0289": u"u", 96 | u"\u018b": u"D", 97 | u"\u1d8f": u"a", 98 | u"\u0291": u"z", 99 | u"\u0110": u"D", 100 | u"\u0193": u"G", 101 | u"\u1d82": u"f", 102 | u"\u0197": u"I", 103 | u"\u029d": u"j", 104 | u"\u019f": u"O", 105 | u"\u2c6c": u"z", 106 | u"\u01ab": u"t", 107 | u"\u01b3": u"Y", 108 | u"\u0236": u"t", 109 | u"\u023a": u"A", 110 | u"\u023e": u"T", 111 | u"\ua740": u"K", 112 | u"\u1d8a": u"s", 113 | u"\ua744": u"K", 114 | u"\u0246": u"E", 115 | u"\ua748": u"L", 116 | u"\ua74c": u"O", 117 | u"\u024e": u"Y", 118 | u"\ua750": u"P", 119 | u"\ua754": u"P", 120 | u"\u0256": u"d", 121 | u"\ua758": u"Q", 122 | u"\u2c62": u"L", 123 | u"\u0266": u"h", 124 | u"\u2c73": u"w", 125 | u"\u2c6a": u"k", 126 | u"\u1d6c": u"b", 127 | u"\u2c6e": u"M", 128 | u"\u1d70": u"n", 129 | u"\u0272": u"n", 130 | u"\u1d92": u"e", 131 | u"\u1d74": u"s", 132 | u"\u2c7a": u"o", 133 | u"\u2c6b": u"Z", 134 | u"\u027e": u"r", 135 | u"\u0180": u"b", 136 | u"\u0282": u"s", 137 | u"\u1d84": u"k", 138 | u"\u0188": u"c", 139 | u"\u018c": u"d", 140 | u"\ua742": u"K", 141 | u"\u1d99": u"u", 142 | u"\u0198": u"K", 143 | u"\u1d8c": u"v", 144 | u"\u0221": u"d", 145 | u"\u2c71": u"v", 146 | u"\u0225": u"z", 147 | u"\u01a4": u"P", 148 | u"\u0127": u"h", 149 | u"\u01ac": u"T", 150 | u"\u0235": u"n", 151 | u"\u01b4": u"y", 152 | u"\u2c72": u"W", 153 | u"\u023d": u"L", 154 | u"\ua743": u"k", 155 | u"\u0249": u"j", 156 | u"\ua74b": u"o", 157 | u"\u024d": u"r", 158 | u"\ua753": u"p", 159 | u"\u0255": u"c", 160 | u"\ua757": u"q", 161 | u"\u2c68": u"h", 162 | u"\ua75b": u"r", 163 | u"\ua75f": u"v", 164 | u"\u2c61": u"l", 165 | u"\u2c65": u"a", 166 | u"\u01e4": u"G", 167 | u"\u0167": u"t", 168 | u"\u2c69": u"K", 169 | u"\u026d": u"l", 170 | u"\u1d6f": u"m", 171 | u"\u0271": u"m", 172 | u"\u1d73": u"r", 173 | u"\u027d": u"r", 174 | u"\u1efe": u"Y", 175 | } 176 | -------------------------------------------------------------------------------- /cleanco/termdata.py: -------------------------------------------------------------------------------- 1 | terms_by_type = { 2 | 'Corporation': ['company', 'incorporated', 'corporation', 'corp.', 'corp', 'inc', 3 | '& co.', '& co', 'inc.', 's.p.a.', 'n.v.', 'a.g.', 'ag', 'nuf', 's.a.', 's.f.', 4 | 'oao', 'co.', 'co' 5 | ], 6 | 'General Partnership': ['soc.col.', 'stg', 'd.n.o.', 'ltda.', 'v.o.s.', 'a spol.', 7 | u've\xc5\x99. obch. spol.', 'kgaa', 'o.e.', 's.f.', 's.n.c.', 's.a.p.a.', 'j.t.d.', 8 | 'v.o.f.', 'sp.j.', 'og', 'sd', ' i/s', 'ay', 'snc', 'oe', 'bt.', 's.s.', 'mb', 9 | 'ans', 'da', 'o.d.', 'hb', 'pt' 10 | ], 11 | 'Joint Stock / Unlimited': ['unltd', 'ultd', 'sal', 'unlimited', 'saog', 'saoc', 'aj', 12 | 'yoaj', 'oaj', 'akc. spol.', 'a.s.' 13 | ], 14 | 'Joint Venture': ['esv', 'gie', 'kv.', 'qk'], 15 | 'Limited': ['pty. ltd.', 'pty ltd', 'ltd', 'l.t.d.', 'bvba', 'd.o.o.', 'ltda', 'gmbh', 16 | 'g.m.b.h', 'kft.', 'kht.', 'zrt.', 'ehf.', 's.a.r.l.', 'd.o.o.e.l.', 's. de r.l.', 17 | 'b.v.', 'tapui', 18 | 'sp. z.o.o.', 'sp. z o.o.', 'spółka z o.o.', 19 | 's.r.l.', 's.l.', 's.l.n.e.', 'ood', 'oy', 'rt.', 20 | 'teo', 'uab', 'scs', 'sprl', 'limited', 'bhd.', 'sdn. bhd.', 'sdn bhd', 'as', 21 | 'lda.', 'tov', 'pp' 22 | ], 23 | 'Limited Liability Company': ['pllc', 'llc', 'l.l.c.', 'plc.', 'plc', 'hf.', 'oyj', 24 | 'a.e.', 'nyrt.', 'p.l.c.', 'sh.a.', 's.a.', 's.r.l.', 'srl.', 'srl', 'aat', '3at', 'd.d.', 25 | 's.r.o.', 'spol. s r.o.', 's.m.b.a.', 'smba', 'sarl', 'nv', 'sa', 'aps', 26 | 'a/s', 'p/s', 'sae', 'sasu', 'eurl', 'ae', 'cpt', 'as', 'ab', 'asa', 'ooo', 'dat', 27 | 'vat', 'zat', 'mchj', 'a.d.' 28 | ], 29 | 'Limited Liability Limited Partnership': ['lllp', 'l.l.l.p.'], 30 | 'Limited Liability Partnership': ['llp', 'l.l.p.', 'sp.p.', 's.c.a.', 's.c.s.'], 31 | 'Limited Partnership': ['gmbh & co. kg', 'lp', 'l.p.', 's.c.s.', 32 | 's.c.p.a', 'comm.v', 'k.d.', 'k.d.a.', 's. en c.', 'e.e.', 's.a.s.', 's. en c.', 33 | 'c.v.', 's.k.a.', 'sp.k.', 's.cra.', 'ky', 'scs', 'kg', 'kd', 'k/s', 'ee', 'secs', 34 | 'kda', 'ks', 'kb','kt' 35 | ], 36 | 'Mutual Fund': ['sicav'], 37 | 'No Liability': ['nl'], 38 | 'Non-Profit': ['vzw', 'ses.', 'gte.'], 39 | 'Private Company': ['private', 'pte', 'xk'], 40 | 'Professional Corporation': ['p.c.', 'vof', 'snc'], 41 | 'Professional Limited Liability Company': ['pllc', 'p.l.l.c.'], 42 | 'Sole Proprietorship': ['e.u.', 's.p.', 't:mi', 'tmi', 'e.v.', 'e.c.', 'et', 'obrt', 43 | 'fie', 'ij', 'fop', 'xt' 44 | ] 45 | } 46 | 47 | terms_by_country = { 48 | 'Albania': ['sh.a.', 'sh.p.k.'], 49 | 'Argentina': ['s.a.', 's.r.l.', 's.c.p.a', 'scpa', 's.c.e i.', 's.e.', 's.g.r', 50 | 'soc.col.' 51 | ], 52 | 'Australia': ['nl', 'pty. ltd.', 'pty ltd'], 53 | 'Austria': ['e.u.', 'stg', 'gesbr', 'a.g.', 'ag', 'og', 'kg'], 54 | 'Belarus': ['aat', '3at'], 55 | 'Belgium': ['esv', 'vzw', 'vof', 'snc', 'comm.v', 'scs', 'bvba', 'sprl', 'cvba', 56 | 'cvoa', 'sca', 'sep', 'gie' 57 | ], 58 | 'Bosnia / Herzegovina': ['d.d.', 'a.d.', 'd.n.o.', 'd.o.o.', 'k.v.', 's.p.'], 59 | 'Brazil': ['ltda', 's.a.', 'pllc', 'ad', 'adsitz', 'ead', 'et', 'kd', 'kda', 'sd'], 60 | 'Bulgaria': ['ad', 'adsitz', 'ead', 'et', 'kd', 'kda', 'sd'], 61 | 'Cambodia': ['gp', 'sm pte ltd.', 'pte ltd.', 'plc ltd.', 'peec', 'sp'], 62 | 'Canada': ['gp', 'lp', 'sp'], 63 | 'Chile': ['eirl', 's.a.', 'sgr', 's.g.r.', 'ltda', 's.p.a.', 'sa', 's. en c.', 64 | 'ltda.' 65 | ], 66 | 'Columbia': ['s.a.', 'e.u.', 's.a.s.', 'suc. de descendants', 'sca'], 67 | 'Croatia': ['d.d.', 'd.o.o.', 'obrt'], 68 | 'Czech Republic': ['a.s.', 'akc. spol.', 's.r.o.', 'spol. s r.o.', 'v.o.s.', u've\xc5\x99. obch. spol.', 'a spol.', 'k.s.', 'kom. spol.', 'kom. spol.'], 69 | 'Denmark': ['i/s', 'a/s', 'k/s', 'p/s', 'amba', 'a.m.b.a.', 'fmba', 'f.m.b.a.', 'smba', 70 | 's.m.b.a.', 'g/s' 71 | ], 72 | 'Dominican Republic': ['c. por a.', 'cxa', 's.a.', 's.a.s.', 'srl.', 'srl', 'eirl.', 'sa', 73 | 'sas' 74 | ], 75 | 'Ecuador': ['s.a.', 'c.a.', 'sa', 'ep'], 76 | 'Egypt': ['sae'], 77 | 'Estonia': ['fie', 'oü', 'as'], 78 | 'Finland': ['t:mi', 'tmi', 'as oy', 'as.oy', 'ay', 'ky', 'oy', 'oyj', 'ok'], 79 | 'France': ['sicav', 'sarl', 'sogepa', 'ei', 'eurl', 'sasu', 'fcp', 'gie', 'sep', 'snc', 80 | 'scs', 'sca', 'scop', 'sem', 'sas' 81 | ], 82 | 'Germany': ['gmbh & co. kg', 'e.g.', 'e.v.', 'gbr', 'ohg', 'partg', 83 | 'kgaa', 'gmbh', 'g.m.b.h.', 'ag', 'mbh & co. kg' 84 | ], 85 | 'Greece': ['a.e.', 'ae', 'e.e.', 'ee', 'epe', 'e.p.e.', 'mepe', 'm.e.p.e.', 'o.e.', 86 | 'oe', 'ovee', 'o.v.e.e.' 87 | ], 88 | 'Guatemala': ['s.a.', 'sa'], 89 | 'Haiti': ['sa'], 90 | 'Hong Kong': ['ltd', 'unltd', 'ultd', 'limited'], 91 | 'Hungary': ['e.v.', 'e.c.', 'bt.', 'kft.', 'kht.', 'kkt.', 'k.v.', 'zrt.', 'nyrt', 92 | 'ev', 'ec', 'rt.' 93 | ], 94 | 'Iceland': ['ehf.', 'hf.', 'ohf.', 's.f.', 'ses.'], 95 | 'India': ['pvt. ltd.', 'ltd.', 'psu', 'pse'], 96 | 'Indonesia': ['ud', 'fa', 'pt'], 97 | 'Ireland': ['cpt', 'teo'], 98 | 'Israel': ['b.m.', 'bm', 'ltd', 'limited'], 99 | 'Italy': ['s.n.c.', 's.a.s.', 's.p.a.', 's.a.p.a.', 's.r.l.', 's.c.r.l.', 's.s.'], 100 | 'Japan': ['k.k.','g.k.','gk','y.k.'], 101 | 'Latvia': ['as', 'sia', 'ik', 'ps', 'ks'], 102 | 'Lebanon': ['sal'], 103 | 'Lithuania': ['uab', 'ab', 'ij', 'mb'], 104 | 'Luxemborg': ['s.a.', 's.a.r.l.', 'secs'], 105 | 'Macedonia': ['d.o.o.', 'd.o.o.e.l', 'k.d.a.', 'j.t.d.', 'a.d.', 'k.d.'], 106 | 'Malaysia': ['bhd.', 'sdn. bhd.'], 107 | 'Mexico': ['s.a.', 's. de. r.l.', 's. en c.', 's.a.b.', 's.a.p.i.', 's.a. de c.v.'], 108 | 'Mongolia': ['xk', 'xxk'], 109 | 'Netherlands': ['v.o.f.', 'c.v.', 'b.v.', 'n.v.'], 110 | 'New Zealand': ['tapui', 'ltd', 'limited'], 111 | 'Nigeria': ['gte.', 'plc', 'ltd.', 'ultd.'], 112 | 'Norway': ['asa', 'as', 'ans', 'ba', 'bl', 'da', 'etat', 'fkf', 'hf', 'iks', 'kf', 113 | 'ks', 'nuf', 'rhf', 'sf' 114 | ], 115 | 'Oman': ['saog', 'saoc'], 116 | 'Pakistan': ['ltd.', 'pvt. ltd.', 'ltd', 'limited'], 117 | 'Peru': ['sa', 's.a.', 's.a.a.'], 118 | 'Philippines': ['coop.', 'corp.', 'corp', 'ent.', 'inc.', 'inc', 'llc', 'l.l.c.', 119 | 'ltd.' 120 | ], 121 | 'Poland': ['p.p.', 's.k.a.', 'sp.j.', 'sp.k.', 'sp.p.', 'sp. z.o.o.', 's.c.', 's.a.'], 122 | 'Portugal': ['lda.', 'crl', 's.a.', 's.f.', 'sgps'], 123 | 'Romania': ['s.c.a.', 's.c.s.', 's.n.c.', 's.r.l.', 'o.n.g.', 's.a.'], 124 | 'Russia': ['ooo', 'oao', 'zao', '3ao', 'пао', 'оао', 'ооо'], 125 | 'Serbia': ['d.o.o.', 'a.d.', 'k.d.', 'o.d.'], 126 | 'Singapore': ['bhd', 'pte ltd', 'sdn bhd', 'llp', 'l.l.p.', 'ltd.', 'pte', 'pte. ltd.'], 127 | 'Slovenia': ['d.d.', 'd.o.o.', 'd.n.o.', 'k.d.', 's.p.'], 128 | 'Slovakia': ['a.s.', 'akc. spol.', 's.r.o.', 'spol. s r.o.', 'k.s.', 'kom. spol.', 'v.o.s.', 'a spol.'], 129 | 'Spain': ['s.a.', 's.a.d.', 's.l.', 's.l.l.', 's.l.n.e.', 's.c.', 's.cra', 's.coop', 130 | 'sal', 'sccl' 131 | ], 132 | 'Sweden': ['ab', 'hb', 'kb'], 133 | 'Switzerland': ['ab', 'sa', 'gmbh', 'g.m.b.h.', 'sarl', 'sagl'], 134 | 'Turkey': ['koop.'], 135 | 'Ukraine': ['dat', 'fop', 'kt', 'pt', 'tdv', 'tov', 'pp', 'vat', 'zat', 'at'], 136 | 'United Kingdom': ['plc.', 'plc', 'cic', 'cio', 'l.l.p.', 'llp', 'l.p.', 'lp', 'ltd.', 137 | 'ltd', 'limited' 138 | ], 139 | 'United States of America': ['llc', 'inc.', 'corporation', 'incorporated', 'company', 140 | 'limited', 'corp.', 'inc.', 'inc', 'llp', 'l.l.p.', 'pllc', 'and company', 141 | '& company', 'inc', 'inc.', 'corp.', 'corp', 'ltd.', 'ltd', '& co.', '& co', 'co.', 142 | 'co', 'lp' 143 | ], 144 | 'Uzbekistan': ['mchj', 'qmj', 'aj', 'oaj', 'yoaj', 'xk', 'xt', 'ok', 'uk', 'qk'] 145 | } 146 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [aliases] 2 | test=pytest 3 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import setuptools 4 | 5 | from setuptools import setup 6 | 7 | with open('README.md', encoding='utf-8') as f: 8 | long_description = f.read() 9 | 10 | setup(name='cleanco', 11 | description='Python library to process company names', 12 | long_description=long_description, 13 | long_description_content_type='text/markdown', 14 | version='2.4-dev', 15 | license="MIT", 16 | license_files=('LICENSE.txt',), 17 | classifiers = [ 18 | "Topic :: Office/Business", 19 | "Development Status :: 4 - Beta", 20 | "Intended Audience :: Developers", 21 | "License :: OSI Approved :: MIT License", 22 | "Programming Language :: Python :: 3" 23 | ], 24 | url='https://github.com/psolin/cleanco', 25 | author='Paul Solin', 26 | author_email='paul@paulsolin.com', 27 | packages=["cleanco"], 28 | setup_requires=['pytest-runner'], 29 | tests_require=['pytest', 'tox'], 30 | ) 31 | -------------------------------------------------------------------------------- /tests/README.txt: -------------------------------------------------------------------------------- 1 | The companies.csv data is from: 2 | 3 | https://www.sec.gov/divisions/corpfin/internatl/alpha2002.htm 4 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolin/cleanco/e0559d74427a6d73abe6c02326c16aef52e2ed81/tests/__init__.py -------------------------------------------------------------------------------- /tests/companies.csv: -------------------------------------------------------------------------------- 1 | 360Networks Inc.;Canada 2 | 724 Solutions Inc.;Canada 3 | A B Electrolux;Sweden 4 | A B SKF;Sweden 5 | A B Volvo;Sweden 6 | A R T International Inc.;Canada 7 | A.O. Tatneft;Russia 8 | A/S Steamship Company Torm;Denmark 9 | ABB Ltd.;Switzerland 10 | Abbey National plc;United Kingdom 11 | Aber Diamond Ltd.;Canada 12 | Abitibi Consolidated Inc.;Canada 13 | ABN Amro Bank N.V.;Netherlands 14 | ABN Amro Holding N.V.;Netherlands 15 | Acambis plc;United Kingdom 16 | Acetex Corp.;Canada 17 | Achieva Development Corp.;Canada 18 | Acindar Industria Argentina de Aceros S.A.;Argentina 19 | ACS-Tech 80 Ltd.;Israel 20 | ActFit.com Inc.;Canada 21 | ActivCard S.A.;France 22 | ADB Systems International Inc.;Canada 23 | Adecco S.A.;Switzerland 24 | Adrian Resources Ltd.;Canada 25 | Advance Agro Public Co. Ltd.;Thailand 26 | Advanced Semiconductor Engineering, Inc.;Taiwan 27 | Advantest Corp.;Japan 28 | AEGON N.V.;Netherlands 29 | Aerco Ltd.;United Kingdom 30 | AES Drax Energy Ltd.;United Kingdom 31 | AES Drax Holdings Ltd.;United Kingdom 32 | AES Gener S.A.;Chile 33 | Aeterna Laboratories Inc.;Canada 34 | Agnico-Eagle Mines Ltd.;Canada 35 | Agrium Inc.;Canada 36 | AimGlobal Technologies Co. Inc.;Canada 37 | Ainsworth Lumber Co. Ltd.;Canada 38 | Air Canada;Canada 39 | Akzo Nobel N.V.;Netherlands 40 | Aladdin Knowledge Systems Ltd.;Israel 41 | Alberta Star Development Corp.;Canada 42 | Alcan Inc.;Canada 43 | Alcatel;France 44 | Alcon, Inc.;Switzerland 45 | Alestra, S. de R.L. de C.V.;Mexico 46 | Alfa Laval Special Finance AB;Sweden 47 | Algoma Steel Inc.;Canada 48 | Alliance Atlantis Communications Corp.;Canada 49 | Allianz Aktiengesellschaft;Germany 50 | Allied Domecq plc;United Kingdom 51 | Allied Irish Banks plc;Ireland 52 | Allura International Inc.;Canada 53 | Almaden Resource Corp.;Canada 54 | Alpha Gold Corp.;Canada 55 | Alstom;France 56 | Altair Nanotechnologies, Inc.;Canada 57 | Altana Aktiengesellschaft;Germany 58 | Altarex Corp.;Canada 59 | Alto Palermo S.A.;Argentina 60 | Alumina Ltd.;Australia 61 | Aluminum Corp of China Ltd.;China 62 | Alvarion Ltd.;Israel 63 | Amarc Resources Ltd.;Canada 64 | Amarin Corp plc;United Kingdom 65 | Amatek Industries Pty. Ltd.;Australia 66 | Amcor Ltd.;Australia 67 | Amdocs Ltd.;United Kingdom 68 | America Mineral Fields Inc.;Canada 69 | America Movil, S.A. de C.V.;Mexico 70 | American Israeli Paper Mills Ltd.;Israel 71 | Amersham plc;United Kingdom 72 | Amvescap plc;United Kingdom 73 | Anchor Lamina, Inc.;Canada 74 | Angiotech Pharmaceuticals, Inc.;Canada 75 | Anglo Swiss Resources Inc.;Canada 76 | Anglogold Ltd.;South Africa 77 | Anooraq Resources Corp.;Canada 78 | Ansell Ltd.;Australia 79 | Antenna TV S.A.;Greece 80 | Anthony Clark International Insurance Brokers Inc.;Canada 81 | API Electronics Group Inc.;Canada 82 | Apiva Ventures Ltd.;Canada 83 | APT Satellite Holdings Ltd.;Bermuda 84 | Aracruz Celulose S.A.;Brazil 85 | ARC Energy Trust;Canada 86 | Arcadis N.V.;Netherlands 87 | Archangel Diamond Co.;Canada 88 | Arel Communications & Software Ltd.;Israel 89 | Argosy Minerals Inc.;Canada 90 | Ariel Resources Ltd.;Canada 91 | Arm Holdings plc;United Kingdom 92 | Art Advanced Research Technologies Inc.;Canada 93 | Aryt Industries Ltd.;Israel 94 | ASAT Holdings Ltd.;Cayman Islands 95 | ASE Test Ltd.;Singapore 96 | Ashanti Goldfields Co. Ltd.;Ghana 97 | Asia Pacific Resources International Ltd.;Bermuda 98 | Asia Pacific Resources Ltd.;Canada 99 | Asia Pacific Wire & Cable Corp. Ltd.;Bermuda 100 | Asia Satellite Telecommunications Holdings Ltd.;Bermuda 101 | Asiacontent.com Ltd.;British Virgin Isl 102 | ASM International N.V.;Netherlands 103 | ASML Holding N.V.;Netherlands 104 | Aspen Group Resources Corp.;Canada 105 | AstraZeneca plc;United Kingdom 106 | Astris Energi Inc.;Canada 107 | AT&T Canada Inc.;Canada 108 | ATI Technologies Inc.;Canada 109 | Atlantic Caspian Resources plc;United Kingdom 110 | Atlantic Telecom Group plc;United Kingdom 111 | Atlas Pacific Ltd.;Australia 112 | ATNA Resources Ltd.;Canada 113 | Attunity Ltd.;Israel 114 | AU Optronics Corp.;Taiwan 115 | Audiocodes Ltd.;Israel 116 | Aurizon Mines Ltd.;Canada 117 | Aurora Metals BVI Ltd.;British Virgin Isl 118 | Australia & New Zealand Banking Group Ltd.;Australia 119 | Autonomy Corp plc;United Kingdom 120 | Avecia Group plc;United Kingdom 121 | Aventis;France 122 | AXA;France 123 | Axcan Pharma Inc.;Canada 124 | Ayotte Music Inc.;Canada 125 | Azteca Holdings, S.A. de C.V.;Mexico 126 | Aztek Technologies Inc.;Canada 127 | B & H Ocean Carriers Ltd.;Liberia 128 | Bakbone Software Inc.;Canada 129 | Balaton Power Inc.;Canada 130 | Ballard Power Systems Inc.;Canada 131 | Baltimore Technologies plc;United Kingdom 132 | Banco Bilboa Vizcaya Argentaria S.A.;Spain 133 | Banco Bradesco S.A.;Brazil 134 | Banco Comercial Portugues S.A.;Portugal 135 | Banco de Chile;Chile 136 | Banco Espirito Santo e Comercial de Lisboa S.A.;Portugal 137 | Banco Itau S.A.;Brazil 138 | Banco Rio de la Plata S.A.;Argentina 139 | Banco Santander Central Hispano S.A.;Spain 140 | Banco Santiago;Chile 141 | Banco Totta & Acores S.A.;Portugal 142 | BanColombia S.A.;Colombia 143 | Bank of Bermuda Ltd.;Bermuda 144 | Bank of Montreal;Canada 145 | Bank of Nova Scotia;Canada 146 | Baran Group Ltd.;Israel 147 | Barbeques Galore Ltd.;Australia 148 | Barclays Bank plc;United Kingdom 149 | Barclays plc;United Kingdom 150 | Barrick Gold Corp.;Canada 151 | BASF Aktiengesellschaft;Germany 152 | Battery Technologies Inc.;Canada 153 | Bayer Aktiengesellschaft;Germany 154 | Baytex Energy Ltd.;Canada 155 | BBVA Banco BHIF;Chile 156 | BBVA Banco Frances S.A.;Argentina 157 | BCE Inc.;Canada 158 | BCI Telecom Holding Inc.;Canada 159 | BE Semiconductor Industries N.V.;Netherlands 160 | Belair Energy Corp.;Canada 161 | Bell Canada;Canada 162 | Belmont Resources, Inc.;Canada 163 | Belzberg Technologies Inc.;Canada 164 | Bema Gold Corp.;Canada 165 | Benetton Group S.p.A.;Italy 166 | Benguet;Philippines 167 | Bennett Environmental Inc.;Canada 168 | Berkley Resources Inc.;Canada 169 | BG Group plc;United Kingdom 170 | BHP Billiton Ltd.;Australia 171 | Biacore International AB;Sweden 172 | Big Rock Brewery Income Trust;Canada 173 | Bioforest Pacific Inc.;Canada 174 | Biomira Inc.;Canada 175 | Biora AB;Sweden 176 | Biotech Holdings Ltd.;Canada 177 | Biovail Corporation;Canada 178 | Birch Mountain Resources Ltd.;Canada 179 | Blue Square - Israel Ltd.;Israel 180 | Bluewater Finance Ltd.;Cayman Islands 181 | Boardwalk Equities Inc.;Canada 182 | BOC Group plc;United Kingdom 183 | Bonso Electronics International Inc.;British Virgin Isl 184 | Bookham Technology plc;United Kingdom 185 | BOS Better Online Solutions Ltd.;Israel 186 | BP plc;United Kingdom 187 | Bradner Ventures Ltd.;Canada 188 | Brascan Corp.;Canada 189 | Brasil Telecom Participacoes S.A.;Brazil 190 | Brasil Telecom S.A.;Brazil 191 | Braskem S.A.;Brazil 192 | Breakwater Resources Ltd.;Canada 193 | Brilliance China Automotive Holdings Ltd.;Bermuda 194 | British Airways plc;United Kingdom 195 | British Biotech plc;United Kingdom 196 | British Energy plc;United Kingdom 197 | British Sky Broadcasting Group plc;United Kingdom 198 | Brocker Technology Group Ltd.;Canada 199 | Brookfield Properties Corp.;Canada 200 | BSN Glasspack SAS;France 201 | BT Group plc;United Kingdom 202 | Buck-a-Day Co. Inc.;Canada 203 | Buffalo Diamonds Ltd.;Canada 204 | Buhrmann N.V.;Netherlands 205 | Bunge Ltd.;Bermuda 206 | Bunzl plc;United Kingdom 207 | BVR Systems Ltd.;Israel 208 | BVR Technologies Ltd.;Israel 209 | Cable and Wireless plc;United Kingdom 210 | Cable Satisfaction International Inc.;Canada 211 | Cabletel Communications Corp.;Canada 212 | Cableuropa, S.A.;United Kingdom 213 | Cablevision S.A.;Argentina 214 | Cadbury Schweppes plc;United Kingdom 215 | Cade Struktur Corp.;Canada 216 | CAE Inc.;Canada 217 | Calais Resources Inc.;Canada 218 | CalciTech Ltd.;Canada 219 | Caledonia Mining Corp.;Canada 220 | California Exploration Ltd.;Canada 221 | Call Net Enterprises Inc.;Canada 222 | Callahan Nordrhine-Westfalen GmbH;Germany 223 | Cambior Inc.;Canada 224 | Cambridge Antibody Technology Group plc;United Kingdom 225 | Cameco Co.;Canada 226 | Camflo Resources Ltd.;Canada 227 | Campbell Resources Inc.;Canada 228 | Camtek Ltd.;Israel 229 | Camuzzi Gas del Sur S.A.;Argentina 230 | Camuzzi Gas Pampeana S.A.;Argentina 231 | Canada Life Financial Corp.;Canada 232 | Canada Southern Petroleum Ltd.;Canada 233 | Canadian 88 Energy Corp.;Canada 234 | Canadian Empire Exploration Corp.;Canada 235 | Canadian Imperial Bank of Commerce;Canada 236 | Canadian National Railway Ltd.;Canada 237 | Canadian Natural Resources Ltd.;Canada 238 | Canadian Pacific Railway Ltd.;Canada 239 | Canadian Superior Energy Inc.;Canada 240 | Canadian Zinc Corp.;Canada 241 | Canalaska Ventures Ltd.;Canada 242 | Canarc Resources Corp.;Canada 243 | Canon Inc.;Japan 244 | Canplats Resources Corp.;Canada 245 | CanWest Global Communications Co.;Canada 246 | Canwest Media Inc.;Canada 247 | Capital Environmental Resource Inc.;Canada 248 | Cardiome Pharma Corp.;Canada 249 | Carlisle Holdings Ltd.;Belize 250 | Carlton Communications plc;United Kingdom 251 | Carmanah Technologies Corp.;Canada 252 | Carmel Container Systems Ltd.;Israel 253 | Cascades Boxboard Group Inc.;Canada 254 | CDG Investments Inc.;Canada 255 | CE Franklin Ltd.;Canada 256 | Cedara Software Corp.;Canada 257 | Celanese AG;Germany 258 | Celestica Inc.;Canada 259 | Celltech Group plc;United Kingdom 260 | Celulosa Arauco y Constitucion S.A.;Chile 261 | Cemex, S.A. de C.V.;Mexico 262 | Cenargo International plc;United Kingdom 263 | Cenes Pharmaceuticals plc;United Kingdom 264 | CenterPulse Ltd.;Switzerland 265 | Central Fund of Canada Ltd.;Canada 266 | Central Minera Corp.;Canada 267 | Ceragon Networks Ltd.;Israel 268 | ČEZ, a.s.;Czech Republic 269 | EMCO spol. s r.o.;Czech Republic 270 | CFM Majestic Inc.;Canada 271 | CGI Group Inc.;Canada 272 | Chai-Na-Ta Corp.;Canada 273 | Chartered Semiconductor Manufacturing Ltd.;Singapore 274 | Chartwell Technology Inc.;Canada 275 | CHC Helicopter Corp.;Canada 276 | Check Point Software Technologies Ltd.;Israel 277 | China Convergent Corp. Ltd.;Bermuda 278 | China Eastern Airlines Corp. Ltd.;China 279 | China Enterprises Ltd.;Bermuda 280 | China Mobile (Hong Kong) Ltd.;Hong Kong 281 | China Petroleum & Chemical Corp. (Sinopec);China 282 | China Southern Airlines Corp. Ltd.;China 283 | China Telecom Corp. Ltd.;China 284 | China Unicom Ltd.;Hong Kong 285 | China Yuchai International Ltd.;Bermuda 286 | Chinadotcom Corp.;Cayman Islands 287 | Chineseworldnet.com Inc.;Cayman Islands 288 | Chipmos Technologies (Bermuda) Ltd.;Bermuda 289 | Ciba Speciality Chemicals Holding Inc.;Switzerland 290 | Cimatron Ltd.;Israel 291 | Cinram International Ltd.;Canada 292 | Citadel Gold Mines Inc.;Canada 293 | City Telecom (H.K.) Ltd.;Hong Kong 294 | CityView Corp Ltd.;Australia 295 | Claxson Interactive Group plc;British Virgin Isl 296 | Clearly Canadian Beverage Corp.;Canada 297 | Clearwave N.V.;Netherlands 298 | Clondalkin Industries plc;Ireland 299 | CLP Power Hong Kong Ltd.;Hong Kong 300 | CNH Global N.V.;Netherlands 301 | CNOOC Ltd.;Hong Kong 302 | Coca-Cola Embonor S.A.;Chile 303 | Coca-Cola Femsa S.A. de C.V.;Mexico 304 | Coca-Cola Hellenic Bottling Co. S.A.;Greece 305 | Cognicase Inc.;Canada 306 | Cognos Inc.;Canada 307 | Coles Myer Ltd.;Australia 308 | Colt Telecom Group plc;United Kingdom 309 | Commercial Consolidators Corp.;Canada 310 | Commonwealth Bank of Australia;Australia 311 | Commtouch Software Ltd.;Israel 312 | Compagnie Generale de Geophysique;France 313 | Companhia Brasileira de Distribuicao;Brazil 314 | Companhia de Bedidas das Americas - AMBEV;Brazil 315 | Companhia de Saneamento Basico de Sao Paulo - SABESP;Brazil 316 | Companhia Energetica de Minas Gerais - CEMIG;Brazil 317 | Companhia Parananse de Energia - Copel;Brazil 318 | Companhia Siderurgica Nacional;Brazil 319 | Companhia Vale de Rio Doce S.A.;Brazil 320 | Compania Anonima Nacional Telefonos de Venezuela S.A.;Venezuela 321 | Compania Cervecerias Unidas S.A.;Chile 322 | Compania de Alimentos Fargo;Argentina 323 | Compania de Minas Buenaventura S.A.;Peru 324 | Compania de Telecomunicaciones de Chile S.A.;Chile 325 | Compania Internacional de Telecomunicaciones S.A.;Argentina 326 | Compton Petroleum Corp.;Canada 327 | Compugen Ltd.;Israel 328 | Comunicacion Celular S.A.;Colombia 329 | Concordia Bus AB;Sweden 330 | Condor Gold Corp.;Canada 331 | Consolidated Envirowaste Industries Inc.;Canada 332 | Consolidated Mercantile Inc.;Canada 333 | Consolidated Trillion Resources Ltd.;Canada 334 | Consolidated Water Co. Ltd.;Cayman Islands 335 | Consortium G Dina Group S.A. de C.V.;Mexico 336 | Consumers Packaging Inc.;Canada 337 | Continental Energy Corp;Canada 338 | Continental Minerals Corp.;Canada 339 | Controladora Comercial Mexicana S.A. de C.V.;Mexico 340 | Converium Holding AG;Switzerland 341 | Cookson Group plc;United Kingdom 342 | Coolbrands International Inc.;Canada 343 | Copamex Industries, S.A. de C.V.;Mexico 344 | Coral Gold Corp.;Canada 345 | Coral Group plc;United Kingdom 346 | Cordiant Communications Group plc;United Kingdom 347 | Corel Corp.;Canada 348 | Corimon C.A.;Venezuela 349 | Corner Bay Silver, Inc.;Canada 350 | Corus Entertainment Inc.;Canada 351 | Corus Group plc;United Kingdom 352 | Cott Corp.;Canada 353 | Counsel Corp.;Canada 354 | CP Ships Ltd.;Canada 355 | Crayfish Co. Ltd.;Japan 356 | Cream Minerals Ltd.;Canada 357 | Creative Technology Ltd.;Singapore 358 | Creator Capital Ltd.;Canada 359 | Credicorp;Bermuda 360 | Credit Suisse Group;Switzerland 361 | Creo Products Inc.;Canada 362 | Cresud Sacif;Argentina 363 | Crew Development Corp.;Canada 364 | CRH plc;Ireland 365 | Cristalerias de Chile S.A.;Chile 366 | Crosswave Communications Inc.;Japan 367 | Crow Technologies 1977 Ltd.;Israel 368 | Crucell N.V.;Netherlands 369 | Cryopack Industries Inc.;Canada 370 | Cryptologic Inc.;Canada 371 | Crystal Graphite Corp.;Canada 372 | Crystal Systems Solutions Ltd.;Israel 373 | Crystallex International Corp.;Canada 374 | CSR Ltd.;Australia 375 | CTI Holdings S.A.;Argentina 376 | Cumberland Resources Ltd.;Canada 377 | Current Technology Corp.;Canada 378 | Cusac Gold Mines Ltd.;Canada 379 | D G Jewelry of Canada Inc.;Canada 380 | DaimlerChrysler AG;Germany 381 | Dassault Systems S.A.;France 382 | Data Fortress Systems Group Ltd.;Canada 383 | Datalex plc;Ireland 384 | Datamirror Corp.;Canada 385 | Datawave Systems Inc.;Canada 386 | Daugherty Resources Inc.;Canada 387 | De Rigo S.p.A.;Italy 388 | Dealcheck.com Inc.;Canada 389 | Decoma International Inc.;Canada 390 | Dectron Internationale Inc.;Canada 391 | Delta Galil Industries Ltd.;Israel 392 | Derek Resources Corp.;Canada 393 | Desc S.A. de C.V.;Mexico 394 | Descartes Systems Group Inc.;Canada 395 | Deswell Industries Inc.;British Virgin Isl 396 | Deutsche Bank Aktiengesellschaft;Germany 397 | Deutsche Telekom AG;Germany 398 | Devon Canada Corp.;Canada 399 | DF China Technology Inc.;British Virgin Isl 400 | Diageo plc;United Kingdom 401 | Dialog Semiconductor plc;United Kingdom 402 | Digital Rooster.com Inc.;Canada 403 | Disco S.A.;Argentina 404 | Distribucion y Servicio D&S S.A.;Chile 405 | Diversinet Inc.;Canada 406 | Doman Industries Ltd.;Canada 407 | Domtar Inc.;Canada 408 | Donner Minerals Ltd.;Canada 409 | Dorel Industries Inc.;Canada 410 | Dr. Reddy's Laboratories Ltd.;India 411 | Draxis Health Inc.;Canada 412 | DSG International Ltd.;British Virgin Isl 413 | DSI Datotech Systems Inc.;Canada 414 | DTA Holding Aktiengesellschaft;Germany 415 | Ducati Motor Holdings S.p.A.;Italy 416 | Dundee Bancorp Inc.;Canada 417 | Dunlop Standard Aerospace Holdings plc;United Kingdom 418 | Dura Products International Ltd.;Canada 419 | Durban Roodepoort Deep Ltd.;South Africa 420 | Dynamic Oil & Gas Ltd.;Canada 421 | DynaMotive Energy Systems Corp.;Canada 422 | Dynea International Oy;Finland 423 | E*Comnetrix Inc.;Canada 424 | E.ON AG;Germany 425 | Earthramp.com Communications Inc.;Canada 426 | Easylink Information Technology Co. Ltd.;British Virgin Isl 427 | Ebookers.com plc;United Kingdom 428 | Echo Bay Mines Ltd.;Canada 429 | ECI Telecommunications Ltd.;Israel 430 | Ectel Ltd.;Israel 431 | EDAP TMS S.A.;France 432 | E-digital Corp.;Canada 433 | EDP - Electricidade de Portugal S.A.;Portugal 434 | Eganagoldpfeil (Holdings) Ltd.;Cayman Islands 435 | Eidos plc;United Kingdom 436 | Eiger Technology Inc.;Canada 437 | Eimo Oyj;Finland 438 | Ek Chor China Motorcycle Company Ltd.;Bermuda 439 | Eksportfinans A/S;Norway 440 | El Nino Ventures, Inc.;Canada 441 | Elan Corp plc;Ireland 442 | Elbit Medical Imaging Ltd.;Israel 443 | Elbit Systems Ltd.;Israel 444 | Elbit Vision Systems Ltd.;Israel 445 | Electrochemical Industries 1952 Ltd.;Israel 446 | Elephant & Castle Group, Inc.;Canada 447 | Elron Electronic Industries Ltd.;Israel 448 | Elscint Ltd.;Israel 449 | Elsevier N.V.;Netherlands 450 | Eltek Ltd.;Israel 451 | Embotelladora Andina S.A.;Chile 452 | Embraer-Empresa Brasileira de Aeronautica S.A.;Brazil 453 | Embratel Participacoes S.A.;Brazil 454 | Emco Ltd.;Canada 455 | Emobile Data Corp.;Canada 456 | Empresa Electrica Pehuenche S.A.;Chile 457 | Empresa Nacional de Electricidad S.A. - Endesa;Chile 458 | Empresas ICA Sociedad Controladora S.A.;Mexico 459 | Enbridge Inc.;Canada 460 | EnCana Corp.;Canada 461 | Endesa S.A.;Spain 462 | Enel S.p.A.;Italy 463 | Energis plc;United Kingdom 464 | EnerNorth Industries Inc.;Canada 465 | Enerplus Resources Fund;Canada 466 | Enersis S.A.;Chile 467 | Engel General Developers Ltd.;Israel 468 | ENI S.p.A.;Italy 469 | Enitel ASA;Norway 470 | Enodis plc;United Kingdom 471 | Enterra Energy Corp.;Canada 472 | Envoy Communications Group, Inc.;Canada 473 | EPCOS AG;Germany 474 | Equant N.V.;Netherlands 475 | Equity Finance Holding Corp.;Belize 476 | Esat Group Ltd;Ireland 477 | e-Sim Ltd.;Israel 478 | Espirito Santo Centrais Eletricas S.A. - Escelsa;Brazil 479 | Espirito Santo Financial Group S.A.;Luxembourg 480 | Etablissements Delhaize Freres & Cie - Le Lion;Belgium 481 | ETZ Lavud Ltd.;Israel 482 | Euro Disney S.C.A.;France 483 | Euro-Tech Holdings Inc.;British Virgin Isl 484 | Eurotel Bratislava, A.S.;Slovak Republic 485 | EuroTrust A/S;Denmark 486 | Eurozinc Mining Corp.;Canada 487 | Excel Maritime Carriers Ltd.;Liberia 488 | Exfo Electro-Optical Engineering Inc.;Canada 489 | Extendicare Inc.;Canada 490 | Fage Dairy Industry S.A.;Greece 491 | Fahnestock Viner Holdings Inc.;Canada 492 | Fairfax Financial Holdings Ltd.;Canada 493 | Fairmont Hotels & Resorts Inc.;Canada 494 | Falconbridge Ltd.;Canada 495 | Fiat S.p.A.;Italy 496 | Fila Holdings S.p.A.;Italy 497 | Filtronic plc;United Kingdom 498 | Findexa I AS;Norway 499 | FirstService Corp.;Canada 500 | Fisher & Paykel Industries Ltd.;New Zealand 501 | Flag Ltd.;Bermuda 502 | Flamel Technologies S.A.;France 503 | Fletcher Challenge Forests Ltd.;New Zealand 504 | Flotek Industries Inc.;Canada 505 | Fomento Economico Mexicano S.A. de C.V.;Mexico 506 | Forbes Medi-Tech Inc.;Canada 507 | Fording, Inc.;Canada 508 | Formula Systems (1985) Ltd.;Israel 509 | Forum National Investments Inc.;Canada 510 | Four Seasons Hotels Inc.;Canada 511 | France Telecom;France 512 | Fresenius Medical Care AG;Germany 513 | Fresh Del Monte Produce Inc.;Cayman Islands 514 | Frisco Bay Industries Ltd.;Canada 515 | Frontline Ltd.;Bermuda 516 | Fundtech Ltd.;Israel 517 | Futuremedia plc;United Kingdom 518 | G. Willi-Food International Ltd.;Israel 519 | Gala Group Holdings plc;United Kingdom 520 | Galen Holdings plc;United Kingdom 521 | Gallaher Group plc;United Kingdom 522 | Gearbulk Holding Ltd.;Bermuda 523 | Gee-Ten Ventures Inc.;Canada 524 | Gemplus International S.A.;Luxembourg 525 | Genesys S.A.;France 526 | Genetronics Biomedical Ltd.;Canada 527 | Gensci Regeneration Sciences Inc.;Canada 528 | Genset;France 529 | Gentry Resources Ltd.;Canada 530 | Gerdau S.A.;Brazil 531 | Getgo Inc.;British Virgin Isl 532 | Getty Copper Corp.;Canada 533 | Gigamedia Ltd.;Singapore 534 | Gilat Satellite Networks Ltd.;Israel 535 | Gildan Activeware Inc.;Canada 536 | Given Imaging Ltd.;Israel 537 | Glamis Gold Ltd.;Canada 538 | GlaxoSmithKline plc;United Kingdom 539 | Glenex Industries Inc.;Canada 540 | Glengarry Holdings Ltd.;Bermuda 541 | Global Light Telecommunications Inc.;Canada 542 | Global Sources Ltd.;Bermuda 543 | Global-Tech Appliances Inc.;British Virgin Isl 544 | Globaltex Industries Inc.;Canada 545 | Globe Telecom plc;Philippines 546 | Globetech Ventures Corp.;Canada 547 | Golar LNG Ltd.;Bermuda 548 | Gold Fields Ltd.;South Africa 549 | Gold Reserve Inc.;Canada 550 | Goldbelt Resources Ltd.;Canada 551 | Goldcorp, Inc.;Canada 552 | Golden Star Resources Ltd.;Canada 553 | Goran Capital Inc.;Canada 554 | Governor and Company of the Bank of Ireland;Ireland 555 | GrandeTel Technologies Inc.;Canada 556 | Grapes Communications B.V.;Netherlands 557 | Great Basin Gold Ltd.;Canada 558 | Great Lakes Power Inc.;Canada 559 | Grohe Holdings GmbH;Germany 560 | Groupe Danone;France 561 | Gruma, S.A. de C.V.;Mexico 562 | Grupo Aeroportuario del Sureste, S.A. de C.V.;Mexico 563 | Grupo Casa Saba, S.A. de C.V.;Mexico 564 | Grupo Elektra S.A.;Mexico 565 | Grupo Financiero Galicia S.A.;Argentina 566 | Grupo Imsa S.A. de C.V.;Mexico 567 | Grupo Industrial Durango S.A. de C.V.;Mexico 568 | Grupo Industrial Maseca S.A. de C.V.;Mexico 569 | Grupo Iusacell Celular, S.A. de C.V.;Mexico 570 | Grupo Iusacell, S.A. de C.V.;Mexico 571 | Grupo Minero Mexicano, S.A. de C.V.;Mexico 572 | Grupo Radio Centro S.A. de C.V.;Mexico 573 | Grupo Simec S.A. de C.V.;Mexico 574 | Grupo Televisa S.A.;Mexico 575 | Grupo TMM, S.A. de C.V.;Mexico 576 | GSI Lumonics Inc.;Canada 577 | GT Group Telecom Inc.;Canada 578 | Guangshen Railway Co. Ltd.;China 579 | Guangzhou-Shenzen Superhighway Holdings Ltd.;British Virgin Isl 580 | Gucci Group N.V.;Netherlands 581 | Haemacure Corp.;Canada 582 | Hanaro Telecom, Inc.;Korea 583 | Hanson plc;United Kingdom 584 | Harmony Gold Mining Co. Ltd.;South Africa 585 | Havas Advertising;France 586 | HDFC Bank Ltd.;India 587 | Head Holding Unternehmensbeteiligung GMBH;Austria 588 | Head N.V.;Netherlands 589 | Healthcare Technologies Ltd.;Israel 590 | Hellenic Telecommunications Organization S.A. - OTE;Greece 591 | Hemosol Inc.;Canada 592 | Hibernia Foods plc;Ireland 593 | Highway Holdings Ltd.;British Virgin Isl 594 | Highwood Resources Ltd.;Canada 595 | Hilton Petroleum Ltd.;Canada 596 | Hitachi Ltd.;Japan 597 | HMV Media Group plc;United Kingdom 598 | Hollinger Inc.;Canada 599 | Honda Motor Co. Ltd.;Japan 600 | Household Financial Corp. Ltd.;Canada 601 | HQI Translec Chile S.A.;Chile 602 | HSBC Bank plc;United Kingdom 603 | HSBC Holdings plc;United Kingdom 604 | Huaneng Power International Inc.;China 605 | Hub International Ltd.;Canada 606 | Hummingbird Ltd.;Canada 607 | Hurricane Hydrocarbons Ltd.;Canada 608 | Husky Energy Inc.;Canada 609 | Hydro One Inc.;Canada 610 | Hydrogenics Corp.;Canada 611 | I.I.S. Intelligent Information Systems Ltd.;Israel 612 | Iamgold Corp;Canada 613 | I-Cable Communications Ltd.;Hong Kong 614 | ICICI Bank Ltd.;India 615 | ICON plc;Ireland 616 | ICOS Vision Systems Corp. N.V.;Belgium 617 | ICTS International N.V.;Netherlands 618 | ID Biomedical Corp.;Canada 619 | iesy Hessen GmbH;Germany 620 | IFCO Systems N.V.;Netherlands 621 | IGN Internet Global Network Inc.;Canada 622 | Ilog S.A.;France 623 | IMA Exploration Inc.;Canada 624 | IMagic TV Inc.;Canada 625 | Imax Corp.;Canada 626 | Immune Network Research Ltd.;Canada 627 | IMP Industrial Mineral Park Mining Corp.;Canada 628 | Imperial Chemical Industries plc;United Kingdom 629 | Imperial Ginseng Products Ltd.;Canada 630 | Imperial Oil Ltd.;Canada 631 | Imperial Tobacco Group plc;United Kingdom 632 | Impress Metal Packaging Holdings B.V.;Netherlands 633 | Incam AG;Germany 634 | Inco Ltd.;Canada 635 | Indo-Pacific Energy Ltd.;New Zealand 636 | Industrial Development Bank of Israel Ltd.;Israel 637 | Industrias Bachoco S.A. de C.V.;Mexico 638 | Industriforvaltnings AB Kinnevik;Sweden 639 | Ineos Group Holdings plc;United Kingdom 640 | Ineos Group Ltd.;United Kingdom 641 | Inficon Holding AG;Switzerland 642 | Infineon Technologies AG;Germany 643 | Infosys Technologies Inc.;India 644 | Infovista S.A.;France 645 | Infowave Software Inc.;Canada 646 | ING Groep N.V.;Netherlands 647 | Innova, S. de R.L.;Mexico 648 | Inside Holdings Inc.;Canada 649 | Instrumentarium Corp.;Finland 650 | Instrumentation Laboratory S.p.A.;Italy 651 | Intasys Corp.;Canada 652 | Intelsat Ltd.;Bermuda 653 | Internacional de Ceramica S.A. de C.V.;Mexico 654 | International Absorbents Inc.;Canada 655 | International Barrier Technology Inc.;Canada 656 | International Briquettes Holding;Cayman Islands 657 | International Financial Group Inc.;Cayman Islands 658 | International Freegold Mineral Development;Canada 659 | International Gemini Technology Inc.;Canada 660 | International Hi Tech Industries Inc.;Canada 661 | International Power plc;United Kingdom 662 | International Thunderbird Gaming Corp.;Canada 663 | International Tower Hill Mines Ltd.;Canada 664 | International Uranium Corp.;Canada 665 | International Utility Structures Inc.;Canada 666 | Internet Gold - Golden Lines Ltd.;Israel 667 | Internet Initiative Japan Inc.;Japan 668 | Intershop Communications Aktiengesellshaft;Germany 669 | Intertape Polymer Group Inc.;Canada 670 | Intertek Testing Services Ltd.;United Kingdom 671 | Intier Automotive Inc.;Canada 672 | Intrawest Corp.;Canada 673 | Iona Technologies Ltd.;Ireland 674 | Ipsco Inc.;Canada 675 | IRSA Inversiones y Representacions, S.A.;Argentina 676 | Irutil Co. Inc.;Bahamas 677 | Ispat International N.V.;Netherlands 678 | Israel Bank of Agriculture Ltd.;Israel 679 | Ito-Yokado Co. Ltd.;Japan 680 | Ivanhoe Energy Inc.;Canada 681 | IWI Holding Ltd.;British Virgin Isl 682 | iXOS Software Aktiengesellschaft;Germany 683 | Jacada Ltd.;Israel 684 | James Hardie Industries N.V.;Netherlands 685 | Jazztel plc;United Kingdom 686 | Jewett Cameron Trading Co.;Canada 687 | Jilin Chemical Industrial Co. Ltd.;China 688 | Jinpan International Ltd.;British Virgin Isl 689 | Jupiters Ltd.;Australia 690 | Kappa Beheer B.V.;Netherlands 691 | Kenrich Mining Corp.;Canada 692 | Kerzner International Ltd.;Bahamas 693 | Key West Energy Corp.;Canada 694 | Kingsway Financial Services, Inc.;Canada 695 | Kinross Gold Corp.;Canada 696 | Klinair Environmental Technologies Ltd.;British Virgin Isl 697 | KLM Royal Dutch Airlines;Netherlands 698 | Knightsbridge Tankers Ltd.;Bermuda 699 | Komatsu Ltd.;Japan 700 | Konami Corp.;Japan 701 | Koninklijke KPN N.V.;Netherlands 702 | Kookmin Bank;Korea 703 | Koor Industries Ltd.;Israel 704 | Korea Electric Power Corp.;Korea 705 | Korea Thrunet Ltd.;Korea 706 | Kowloon-Canton Railway Corp.;Hong Kong 707 | KT Corp.;Korea 708 | Kubota Corp.;Japan 709 | Kyocera Corp.;Japan 710 | Lafarge;France 711 | Laidlaw Inc.;Canada 712 | Lanoptics Ltd.;Israel 713 | Las Vegas from Home.com Entertainment Inc.;Canada 714 | Lastminute.com plc;United Kingdom 715 | Latin American Export Bank;Panama 716 | Leader Capital Corp.;Canada 717 | Leader Mining International Inc.;Canada 718 | Leading Brands, Inc.;Canada 719 | Legrand;France 720 | Leica Geosystems Finance plc;United Kingdom 721 | Leitch Technology Corp.;Canada 722 | Lihir Gold Ltd.;Papua New Guinea 723 | Linea Aerea Nacional Chile S.A.- LanChile;Chile 724 | LinuxWizardry Systems, Inc.;Canada 725 | Lion Bioscience Aktiengesellschaft;Germany 726 | Lions Gate Entertainment Corp.;Canada 727 | Liquidation World Inc.;Canada 728 | LJ International Ltd.;British Virgin Isl 729 | Lloyds TSB Group plc;United Kingdom 730 | LML Payment Systems Inc.;Canada 731 | Localiza Rent-a-Car S.A.;Brazil 732 | LogicalOptions International Inc.;Canada 733 | Logitech International S.A.;Switzerland 734 | London Electricity Group plc;United Kingdom 735 | Lorus Therapeutics Inc.;Canada 736 | Lucite International Group Holdings Ltd.;United Kingdom 737 | Lucky 1 Enterprises Inc.;Canada 738 | Lund Ventures Ltd.;Canada 739 | Luscar Coal Ltd.;Canada 740 | Luxfer Holdings plc;United Kingdom 741 | Luxottica Group S.p.A.;Italy 742 | LVMH Moet-Hennessy Louis Vuitton;France 743 | Macronix International Co.;Taiwan 744 | Mad Catz Interactive, Inc.;Canada 745 | Madeco S.A.;Chile 746 | Madge Networks N.V.;Netherlands 747 | Madison Enterprises Corp.;Canada 748 | Magal Security Systems Ltd.;Israel 749 | Magic Software Enterprises Ltd.;Israel 750 | Magna International Inc.;Canada 751 | Magyar Tavkozlesi RT. - MATAV;Hungary 752 | Mahanagar Telephone Nigam Ltd.;India 753 | Makita Corp.;Japan 754 | Manhattan Minerals Corp.;Canada 755 | Manulife Financial Corp.;Canada 756 | Marconi plc;United Kingdom 757 | Marnetics Broadband Technologies Ltd.;Israel 758 | Marsulex Inc.;Canada 759 | Masisa S.A.;Chile 760 | Masonite International Corp.;Canada 761 | Matav Cable Systems Media Ltd.;Israel 762 | Matsushita Electric Industrial Co.;Japan 763 | Maxcom Telecomunicaciones, S.A. de C.V.;Mexico 764 | Mayne Group Ltd.;Australia 765 | MC Shipping Inc;Liberia 766 | MDC Co.;Canada 767 | MDS Inc.;Canada 768 | MDSI Mobile Data Solutions Inc.;Canada 769 | Med Emerg International Ltd.;Canada 770 | Med Net International Ltd.;Bermuda 771 | Mentergy Ltd.;Israel 772 | MEPC plc;United Kingdom 773 | Mer Telemanagement Solutions Ltd.;Israel 774 | Merant plc;United Kingdom 775 | Mercury Partners & Co. Inc.;Canada 776 | Mercury Scheduling Systems Inc.;Canada 777 | Meridian Gold Inc.;Canada 778 | Messer Griesheim Holding AG;Germany 779 | Metal Storm Ltd.;Australia 780 | Metalink Ltd.;Israel 781 | Metallica Resources Inc.;Canada 782 | Methanex Corp.;Canada 783 | Metro International S.A.;Luxembourg 784 | MetroGas S.A.;Argentina 785 | Metso Oy;Finland 786 | MFC Bancorp Ltd.;Canada 787 | Microcell Telecommunications Inc.;Canada 788 | Micrologix Biotech, Inc.;Canada 789 | Micromem Technologies Inc.;Canada 790 | Millar Western Forest Products Ltd.;Canada 791 | Millea Holdings;Japan 792 | Millicom International Cellular S.A.;Luxembourg 793 | Minco Mining and Metals Corp.;Canada 794 | Mind C.T.I. Ltd.;Israel 795 | Minefinders Corp. Ltd.;Canada 796 | Mirae Corp.;Korea 797 | Miramar Mining Co.;Canada 798 | Mirtronics Inc.;Canada 799 | Mitsubishi Tokyo Financial Group, Inc.;Japan 800 | Mitsui & Company Ltd.;Japan 801 | Mitsui Sumitomo Insurance Co. Ltd.;Japan 802 | mmO2 plc;United Kingdom 803 | Mobile Telesystems OJSC;Russia 804 | Modern Times Group MTG AB;Sweden 805 | Moore Corp. Ltd.;Canada 806 | Mountain Province Diamonds, Inc.;Canada 807 | Moydow Mines International Inc.;Canada 808 | M-Systems Flash Disk Pioneers Ltd.;Israel 809 | MTR Corp.;Hong Kong 810 | Multicanal S.A.;Argentina 811 | Nam Tai Electronics Inc.;British Virgin Isl 812 | Namibian Minerals Corp.;Canada 813 | Naspers Ltd.;South Africa 814 | National Australia Bank Ltd.;Australia 815 | National Bank of Greece S.A.;Greece 816 | National Construction Group Inc.;Canada 817 | National Grid Group plc;United Kingdom 818 | National Westminster plc;United Kingdom 819 | Natuzzi S.p.A.;Italy 820 | NCE Petrofund Ltd.;Canada 821 | NDS Group plc;United Kingdom 822 | NDT Ventures Ltd.;Canada 823 | NEC Corp.;Japan 824 | Nera ASA;Norway 825 | Net Force Systems Inc.;Antigua 826 | Net Nanny Software International Inc.;Canada 827 | Net Sat Servicos Ltda.;Brazil 828 | Net Servicos de Comunicacao S.A.;Brazil 829 | Netco Energy Inc.;Canada 830 | Netease.com Inc.;Cayman Islands 831 | Netia Holdings S.A.;Poland 832 | Nettron.com Corp.;Canada 833 | New China Homes, Ltd.;Cayman Islands 834 | New Skies Satellites N.V.;Netherlands 835 | New Tel Ltd.;Australia 836 | NewKidCo International Inc.;Canada 837 | News Corporation Ltd.;Australia 838 | Nexen Inc.;Canada 839 | Nexus Telocation Systems Ltd.;Israel 840 | Nice Systems Ltd.;Israel 841 | Nicholas Financial Inc.;Canada 842 | Nidec Corp.;Japan 843 | Nippon Telegraph and Telephone Corp.;Japan 844 | Nissin Co. Ltd.;Japan 845 | Noga Electro-Mechanical Industries (1986) Ltd.;Israel 846 | Nokia Corp.;Finland 847 | Nomura Holdings, Inc.;Japan 848 | Norampac Inc.;Canada 849 | Noranda Inc.;Canada 850 | Nord Pacific Ltd.;Canada 851 | Nordic American Tanker Shipping Ltd.;Bermuda 852 | Normandy Yandal Operations Ltd.;Australia 853 | Norsat International Inc.;Canada 854 | Norsk Hydro A/S;Norway 855 | Norske Skog Canada Ltd.;Canada 856 | Nortel Inversora S.A.;Argentina 857 | Nortel Networks Corp.;Canada 858 | North American Palladium Ltd.;Canada 859 | Northern Dynasty Minerals Ltd.;Canada 860 | Northern Offshore ASA;Norway 861 | Northern Rock plc;United Kingdom 862 | Nova Chemicals Corp.;Canada 863 | Nova Gas Transmission Ltd.;Canada 864 | Nova Measuring Instruments Ltd.;Israel 865 | Novamerican Steel Inc.;Canada 866 | Novartis AG;Switzerland 867 | NovAtel Inc.;Canada 868 | Novel Denim Holdings Ltd.;British Virgin Isl 869 | Novogen Ltd.;Australia 870 | Novo-Nordisk A/S;Denmark 871 | NTT Docomo, Inc.;Japan 872 | Nur Macroprinters Ltd.;Israel 873 | Nymox Pharmaceutical Corp.;Canada 874 | O&Y Properties Corp.;Canada 875 | O2micro International Ltd.;Cayman Islands 876 | Occidente y Caribe Celular S.A.;Colombia 877 | Oce N.V.;Netherlands 878 | Ocean Rig ASA;Norway 879 | Offshore Systems International Ltd.;Canada 880 | Olicom A/S;Denmark 881 | Olympic Resources Ltd.;Canada 882 | Omninet International Ltd.;Bermuda 883 | Oncolytics Biotech Inc.;Canada 884 | On-Track Innovations Ltd.;Israel 885 | Open Joint Stock Company of Long Distance - Rostelecom;Russia 886 | Open Text Co.;Canada 887 | OpenTV Ltd.;British Virgin Isl 888 | Optibase Ltd.;Israel 889 | Optimal Robotics Corp.;Canada 890 | Orange plc;United Kingdom 891 | Orbital Engine Corp Ltd.;Australia 892 | Orbotech Ltd.;Israel 893 | Orckit Communications Ltd.;Israel 894 | Orient-Express Hotels Ltd.;Bermuda 895 | Origin Energy Ltd.;Australia 896 | Orix Corp.;Japan 897 | Oromin Explorations Ltd.;Canada 898 | Orthofix International N.V.;Neth. Antilles 899 | Oxford Glycosciences plc;United Kingdom 900 | Oxford Software Developers Inc.;Canada 901 | Oz Investments Co. Ltd.;Israel 902 | P&O Princess Cruises plc;United Kingdom 903 | P.T. Indonesian Satellite Corp. Tbk;Indonesia 904 | P.T. Polytama Propindo Tbk;Indonesia 905 | P.T. Telekomunikasi Indonesia Tbk;Indonesia 906 | P.T. Tri Polyta Indonesia Tbk;Indonesia 907 | Pacific Internet Ltd.;Singapore 908 | Pacific North West Capital Corp.;Canada 909 | Pacific Rim Mining Corp.;Canada 910 | Pan American Silver Co.;Canada 911 | Partner Communications Co. Ltd.;Israel 912 | PartnerRe Ltd.;Bermuda 913 | PCCW Ltd.;Hong Kong 914 | PDVSA Finance Ltd.;Cayman Islands 915 | Peace Entertainment Group Inc.;Canada 916 | Peaksoft Multinet Corp.;Canada 917 | Pearson plc;United Kingdom 918 | Pechiney;France 919 | Pengrowth Energy Trust;Canada 920 | Perdigao S.A.;Brazil 921 | Perez Companc S.A.;Argentina 922 | Perle Systems Ltd.;Canada 923 | Peruvian Gold Ltd.;Canada 924 | Petro-Canada;Canada 925 | PetroChina Co. Ltd.;China 926 | Petroleo Brasileiro S.A. - Petrobras;Brazil 927 | Petroleos de Venezuela;Venezuela 928 | Petroleos Mexicanos (Pemex);Mexico 929 | Petroleum Geo-Services A/S;Norway 930 | Petsec Energy Ltd.;Australia 931 | Pfeiffer Vacuum Technology AG;Germany 932 | Philippine Long Distance Telephone Co.;Philippines 933 | Philips Electronics N.V.;Netherlands 934 | Photochannel Networks Inc.;Canada 935 | Pioneer Corp.;Japan 936 | Pivotal Corp.;Canada 937 | Placer Dome Inc.;Canada 938 | Plaintree Systems Ltd.;Canada 939 | Platinum Group Metals Ltd.;Canada 940 | Playstar Corp.;Antigua 941 | PLC Systems Inc.;Canada 942 | Polska Telefonia Cyfrowa Sp Z o o.;Poland 943 | Polyair Inter Pack Inc.;Canada 944 | Polymet Mining Corp.;Canada 945 | Portrush Petroleum Corp.;Canada 946 | Portugal Telecom, SGPS, S.A.;Portugal 947 | POSCO;Korea 948 | Potash Corp. of Saskatchewan;Canada 949 | Prana Biotechnology Ltd.;Australia 950 | Precision Drilling Corp.;Canada 951 | Preem Holdings AB;Sweden 952 | Premier Farnell plc;United Kingdom 953 | Premier International Foods plc;United Kingdom 954 | PrimaCom AG;Germany 955 | Primewest Energy Trust;Canada 956 | Princeton Media Group Inc.;Canada 957 | Professional Staff plc;United Kingdom 958 | Progen Industries Ltd.;Australia 959 | Pro-Market Global plc;United Kingdom 960 | Propernyn B.V.;Netherlands 961 | Protherics plc;United Kingdom 962 | Provalis plc;United Kingdom 963 | Provida Pension Fund Administrator;Chile 964 | Provident Energy Trust;Canada 965 | Prudential plc;United Kingdom 966 | PSi Technologies Holdings, Inc.;Philippines 967 | Publicis Groupe S.A.;France 968 | Pyng Technologies Corp.;Canada 969 | QI Systems Inc.;Canada 970 | Qiagen N.V.;Netherlands 971 | Qiao Xing Universal Telephone, Inc.;British Virgin Isl 972 | QLT Inc.;Canada 973 | QSC AG;Germany 974 | QSound Labs Inc.;Canada 975 | Quartz Mountain Gold Corp.;Canada 976 | Quebecor Inc.;Canada 977 | Quebecor Media Inc.;Canada 978 | Quebecor World Inc.;Canada 979 | Queenstake Resources Ltd.;Canada 980 | Quilmes Industrial Quinsa S.A.;Luxembourg 981 | Quinenco S.A.;Chile 982 | Quintalinux Ltd.;British Virgin Isl 983 | QXL Ricardo plc;United Kingdom 984 | Rada Electronic Industries Ltd.;Israel 985 | Radcom Ltd.;Israel 986 | Radica Games Ltd.;Bermuda 987 | Radius Explorations Ltd.;Canada 988 | Radware Ltd.;Israel 989 | Randgold & Exploration Co. Ltd.;South Africa 990 | Randgold Resources Ltd.;United Kingdom 991 | Rank Group plc;United Kingdom 992 | Rediff.com India Ltd.;India 993 | Reed International plc;United Kingdom 994 | Reg Technologies Inc.;Canada 995 | Regional Independent Media Group plc;United Kingdom 996 | Regus plc;United Kingdom 997 | Repadre Capital Corp.;Canada 998 | Repsol YPF S.A.;Spain 999 | Republic Goldfields Inc.;Canada 1000 | Research in Motion Ltd.;Canada 1001 | Resin Systems Inc.;Canada 1002 | Resource Finance & Investments Ltd.;Canada 1003 | Retalix Ltd.;Israel 1004 | Reuters Group plc;United Kingdom 1005 | Revenue Properties Co. Ltd.;Canada 1006 | Rhodia;France 1007 | Richmont Mines Inc.;Canada 1008 | Ricoh Company Ltd.;Japan 1009 | Rimfire Minerals Corp.;Canada 1010 | Rio Algom Ltd.;Canada 1011 | Rio Narcea Gold Mines Ltd.;Canada 1012 | Rio Tinto Ltd.;Australia 1013 | Rio Tinto plc;United Kingdom 1014 | RIT Technologies Ltd.;Israel 1015 | Ritchie Bros. Auctioneers Inc.;Canada 1016 | Riverdeep Group plc;Ireland 1017 | RoboGroup T.E.K. Ltd.;Israel 1018 | Robomatix Technologies Ltd.;Israel 1019 | Rockwell Ventures Inc.;Canada 1020 | Rogers Cable Inc.;Canada 1021 | Rogers Communications Inc.;Canada 1022 | Rogers Wireless Inc.;Canada 1023 | Rosedale Decorative Products Ltd.;Canada 1024 | Royal & Sun Alliance Insurance Group plc;United Kingdom 1025 | Royal Ahold Ltd. - Koninklijke Ahold N.V.;Netherlands 1026 | Royal Bank of Canada;Canada 1027 | Royal Bank of Scotland Group;United Kingdom 1028 | Royal Caribbean Cruises Ltd.;Liberia 1029 | Royal Dutch Petroleum Co.;Netherlands 1030 | Royal Group Technologies Ltd.;Canada 1031 | Royal Olympic Cruise Lines Inc.;Liberia 1032 | Royal Standard Minerals Inc.;Canada 1033 | Rtica Corp.;Canada 1034 | Rubicon Minerals Corp.;Canada 1035 | Russel Metals Inc.;Canada 1036 | Ryanair Holdings plc;Ireland 1037 | Sadia S.A.;Brazil 1038 | SAES Getters S.p.A.;Italy 1039 | Samex Mining Corp.;Canada 1040 | San Antonios Resources Inc.;Canada 1041 | San Telmo Energy Ltd.;Canada 1042 | Sand Technology Inc.;Canada 1043 | Sanofi-Synthelabo;France 1044 | Sanpaolo-IMI S.p.A.;Italy 1045 | SAP Aktiengesellschaft;Germany 1046 | Sapiens International Corp. N.V.;Neth. Antilles 1047 | Sappi Ltd.;South Africa 1048 | Satelites Mexicanos S.A. de C.V.;Mexico 1049 | Satyam Computer Services Ltd.;India 1050 | Savia, S.A. de C.V.;Mexico 1051 | SBS Broadcasting S.A.;Luxembourg 1052 | Scania AB;Sweden 1053 | Schering Aktiengesellschaft;Germany 1054 | Schroder Ventures International Investment Trust;United Kingdom 1055 | Scitex Corp. Ltd.;Israel 1056 | Scoot.com plc;United Kingdom 1057 | SCOR;France 1058 | Scottish Power plc;United Kingdom 1059 | SCS Solars Computing Systems Inc.;Canada 1060 | Sea Containers Ltd.;Bermuda 1061 | Seat Pagine Gialle S.p.A.;Italy 1062 | Secureview Systems Inc.;Canada 1063 | Sense Technologies Inc.;Canada 1064 | Serono S.A.;Switzerland 1065 | Seven Seas Petroleum Inc.;Canada 1066 | SGL Carbon Aktiengesellschaft;Germany 1067 | Sharpe Resources Corp.;Canada 1068 | Shaw Communications Inc.;Canada 1069 | Shell Canada Ltd.;Canada 1070 | Shell Transport and Trading Co. Ltd.;United Kingdom 1071 | Siderca S.A.I.C.;Argentina 1072 | Siemens Aktiengesellschaft;Germany 1073 | Sierra Wireless, Inc.;Canada 1074 | SIFY Ltd.;India 1075 | Signet Group plc;United Kingdom 1076 | Silent Witness Enterprises Inc.;Canada 1077 | Silicom Ltd.;Israel 1078 | Siliconware Precision Industries Co. Ltd.;Taiwan 1079 | Silver Standard Resources Inc.;Canada 1080 | Silverado Gold Mines Ltd.;Canada 1081 | Silverline Technologies Ltd.;India 1082 | Sinopec Beijing Yanhua Petrochemical Co. Ltd.;China 1083 | Sinopec Shanghai Petrochemical Co. Ltd.;China 1084 | Sintec Co. Ltd.;Korea 1085 | Six Continents plc;United Kingdom 1086 | SK Telecom Corp.;Korea 1087 | Skyepharma plc;United Kingdom 1088 | SmarTire Systems Inc.;Canada 1089 | Smedvig ASA;Norway 1090 | Smith & Nephew plc;United Kingdom 1091 | Sodexho Alliance S.A.;France 1092 | Softcare EC.com Inc.;Canada 1093 | Song Networks Holding AB;Sweden 1094 | Song Networks N.V.;Netherlands 1095 | Sony Corp.;Japan 1096 | Sopheon plc;United Kingdom 1097 | Southwestern Resources Corp.;Canada 1098 | Sparkling Spring Water Group Ltd.;Canada 1099 | Spectrum Signal Processing Inc.;Canada 1100 | Spirent plc;United Kingdom 1101 | Sportech plc;United Kingdom 1102 | Spur Ventures Inc.;Canada 1103 | SQM - Sociedad Quimica y Minera S.A.;Chile 1104 | ST Assembly Test Services Ltd.;Singapore 1105 | Stake Technology Ltd.;Canada 1106 | Star Choice Communications Inc.;Canada 1107 | Star Resources Corp.;Canada 1108 | Starfield Resources Inc.;Canada 1109 | Statoil ASA;Norway 1110 | Stelmar Shipping Ltd.;Liberia 1111 | Stena AB;Sweden 1112 | STET Hellas Telecommunications S.A.;Greece 1113 | STMicroelectronics N.V.;Netherlands 1114 | Stockscape.com Technology Inc.;Canada 1115 | Stolt Nielsen S.A.;Luxembourg 1116 | Stolt Offshore S.A.;Luxembourg 1117 | Stora Enso OYJ;Finland 1118 | Stressgen Biotechnologies Corp.;Canada 1119 | Suez;France 1120 | Sun Life Financial Services of Canada;Canada 1121 | Sun Media Corp.;Canada 1122 | Suncor Energy Inc.;Canada 1123 | Sunday Communications Ltd.;Cayman Islands 1124 | Sungold Entertainment Corp.;Canada 1125 | Supermercados Unimarc S.A.;Chile 1126 | Super-Sol Ltd.;Israel 1127 | Swedish Export Credit Corp.;Sweden 1128 | Swedish Match AB;Sweden 1129 | Swisscom;Switzerland 1130 | Syngenta AG;Switzerland 1131 | SYNSORB Biotech Inc.;Canada 1132 | T.V.G. Technologies Ltd.;Israel 1133 | Tag Oil Ltd.;Canada 1134 | Taiwan Semiconductor Manufacturing Co. Ltd.;Taiwan 1135 | Talisman Energy Inc.;Canada 1136 | Taro Pharmaceutical Industries Ltd.;Israel 1137 | Taseko Mines Ltd.;Canada 1138 | TAT Technologies Ltd.;Israel 1139 | TDC A/S;Denmark 1140 | TDK Corp.;Japan 1141 | TDL Infomedia Group plc;United Kingdom 1142 | Technip-Coflexip;France 1143 | Techsite Strategies Corp.;Canada 1144 | Tecnomatix Technologies Ltd.;Israel 1145 | Teekay Shipping Inc.;Marshall Isl 1146 | Tefron Ltd.;Israel 1147 | Tele Celular Sul Participacoes S.A.;Brazil 1148 | Tele Centro Oeste Celular Participacoes S.A.;Brazil 1149 | Tele Leste Celular Participacoes S.A.;Brazil 1150 | Tele Nordeste Celular Participacoes S.A.;Brazil 1151 | Tele Norte Celular Participacoes S.A.;Brazil 1152 | Tele Norte Leste Participacoes S.A.;Brazil 1153 | Tele Sudeste Celular Participacoes S.A.;Brazil 1154 | Tele2 AB;Sweden 1155 | Telebras S.A.;Brazil 1156 | Telecom Argentina STET France Telecom S.A.;Argentina 1157 | Telecom Corp of New Zealand Ltd.;New Zealand 1158 | Telecom Italia S.p.A.;Italy 1159 | Telecomunicaios de Sao Paulo S.A. - Telesp;Brazil 1160 | Telefonaktiebolaget L M Ericsson;Sweden 1161 | Telefonica de Argentina S.A.;Argentina 1162 | Telefonica del Peru S.A.;Peru 1163 | Telefonica Holding of Argentina, Inc.;Argentina 1164 | Telefonica Moviles, S.A.;Spain 1165 | Telefonica S.A.;Spain 1166 | Telefonos de Mexico S.A. de C.V.;Mexico 1167 | Teleglobe Inc.;Canada 1168 | Telekom Austria;Austria 1169 | Telemig Celular Participacoes S.A.;Brazil 1170 | Telenor ASA;Norway 1171 | Telepanel Systems Inc.;Canada 1172 | Telesis North Communications Inc.;Canada 1173 | Telesp Celular Participacoes S.A.;Brazil 1174 | Telesystem International Wireless Inc.;Canada 1175 | TeleWest Communications plc;United Kingdom 1176 | Telex Chile S.A.;Chile 1177 | Teliasonera AB;Sweden 1178 | Telstra Corp Ltd.;Australia 1179 | Telus Corp.;Canada 1180 | Tembec Industries Inc.;Canada 1181 | Tenaris S.A.;Luxembourg 1182 | Terra Networks S.A.;Spain 1183 | Tesco Corp.;Canada 1184 | Tesma International Inc.;Canada 1185 | Teva Pharmaceutical Industries Ltd.;Israel 1186 | Tevecap S.A.;Brazil 1187 | Texon International plc;United Kingdom 1188 | TFM, S.A. de C.V.;Mexico 1189 | Thinkpath.com Inc.;Canada 1190 | Thomson Corp;Canada 1191 | Thomson S.A.;France 1192 | Thrilltime Entertainment International Inc.;Canada 1193 | Thrush Industries Inc.;Canada 1194 | Tioga Technologies Ltd.;Israel 1195 | Titan Trading Analytics Inc.;Canada 1196 | TLC Vision Corp.;Canada 1197 | TM Group Holdings plc;United Kingdom 1198 | Tomkins plc;United Kingdom 1199 | Top Image Systems Ltd.;Israel 1200 | Toronto-Dominion Bank;Canada 1201 | TotalFinaElf S.A.;France 1202 | Tower Semiconductor Ltd.;Israel 1203 | Toyota Motor Corp.;Japan 1204 | TPG N.V.;Netherlands 1205 | TPN Holdings plc;United Kingdom 1206 | Tracer Petroleum Corp.;Canada 1207 | Trade Wind Communications Ltd.;Bermuda 1208 | TradeRadius Online Inc.;Canada 1209 | Tramford International Ltd.;British Virgin Isl 1210 | Trans Global Interactive Ltd.;Australia 1211 | TransAlta Corp.;Canada 1212 | TransCanada Pipelines Ltd.;Canada 1213 | Transco plc;United Kingdom 1214 | Transcom Worldwide S.A.;Luxembourg 1215 | Transgene S.A.;France 1216 | Transglobe Energy Corp.;Canada 1217 | Trans-Orient Petroleum Inc.;Canada 1218 | Transportadora de Gas del Sur S.A.;Argentina 1219 | Tranz Rail Holdings Ltd.;New Zealand 1220 | Trenche Electric S.A.;France 1221 | Trend Micro Inc.;Japan 1222 | Triant Technologies Inc.;Canada 1223 | Triband Resource Corp.;Canada 1224 | Tricom, S.A.;Dominican Republic 1225 | Trimark Oil & Gas Ltd.;Canada 1226 | Trinity Biotech plc;Ireland 1227 | Trintech Group plc;Ireland 1228 | Triple P N.V.;Netherlands 1229 | Trivalence Mining Corp.;Canada 1230 | Trooper Technologies Inc.;Canada 1231 | Tsakos Energy Navigation Ltd.;Bermuda 1232 | TTI Team Telecom International Ltd.;Israel 1233 | Tubos de Acero de Mexico S.A.;Mexico 1234 | Turbodyne Technologies Inc.;Canada 1235 | Turkcell Iletisim Hizmetleri AS;Turkey 1236 | TV Azteca, S.A. de C.V.;Mexico 1237 | TVX Gold Inc.;Canada 1238 | Twin Mining Corp.;Canada 1239 | UBS AG;Switzerland 1240 | Ultra Petroleum Corp.;Canada 1241 | Ultrapar Participacoes S.A.;Brazil 1242 | Ultrapetrol (Bahamas) Ltd.;Bahamas 1243 | Unibail;France 1244 | Unibanco Holdings S.A.;Brazil 1245 | Unibanco-Uniao de Bancos Brasileiros S.A.;Brazil 1246 | Uniglobe.com Inc.;Canada 1247 | Unilens Vision Inc.;Canada 1248 | Unilever N.V.;Netherlands 1249 | Unilever plc;United Kingdom 1250 | United Business Media plc;United Kingdom 1251 | United Microelectronics Corp.;Taiwan 1252 | United Utilities plc;United Kingdom 1253 | Universal Domains Inc.;Canada 1254 | UPM Kymmene Miramichi Inc.;Canada 1255 | UPM-Kymmene OYJ;Finland 1256 | Usinor Sacilor;France 1257 | UTi Worldwide Inc.;British Virgin Isl 1258 | Van der Moolen Holding N.V.;Netherlands 1259 | Vancan Capital Corp.;Canada 1260 | Vannessa Ventures Ltd.;Canada 1261 | Vantico Group S.A.;Luxembourg 1262 | Vasogen, Inc.;Canada 1263 | Venture Pacific Development Corp.;Canada 1264 | Verena Minerals Corp.;Canada 1265 | Vernalis Group plc;United Kingdom 1266 | Versatel Telecom International N.V.;Netherlands 1267 | VI Group plc;United Kingdom 1268 | Videsh Sanchar Nigam Ltd.;India 1269 | Vimpel Communications;Russia 1270 | Vina Concha y Toro S.A.;Chile 1271 | Virgin Express Holdings plc;United Kingdom 1272 | Virginia Gold Mines Inc.;Canada 1273 | Virotec International Ltd.;Australia 1274 | Viryanet Ltd.;Israel 1275 | Vision Global Solutions, Inc.;Canada 1276 | Vista Gold Corp.;Canada 1277 | Vitran Co. Ltd.;Canada 1278 | Vitro S.A.;Mexico 1279 | Vivendi Environnement;France 1280 | Vivendi Universal;France 1281 | Vocaltec Communications Ltd.;Israel 1282 | Vodafone Group plc;United Kingdom 1283 | Votorantim Celulose e Papel S.A.;Brazil 1284 | Voyus Ltd.;Canada 1285 | W.P. Stewart & Co. Ltd.;Bermuda 1286 | Wacoal Corp.;Japan 1287 | Watch Resources Ltd.;Canada 1288 | Waterford Wedgwood plc;Ireland 1289 | Waterford Wedgwood UK plc;United Kingdom 1290 | Wavecom S.A.;France 1291 | Wescast Industries Inc.;Canada 1292 | Westaim Corp.;Canada 1293 | Western Copper Holdings Ltd.;Canada 1294 | Western Oil Sands Inc.;Canada 1295 | Westpac Banking Corp.;Australia 1296 | Wharf Holdings Ltd.;Hong Kong 1297 | Wheaton River Minerals Ltd.;Canada 1298 | WideCom Group, Inc.;Canada 1299 | William Hill Ltd.;United Kingdom 1300 | Willis Group Holdings Ltd.;Bermuda 1301 | Willis Group Ltd.;United Kingdom 1302 | Wimm-Bill-Dann Foods OJSC;Russia 1303 | Wipro Ltd.;India 1304 | WMC Resources Ltd.;Australia 1305 | Wolseley plc;United Kingdom 1306 | Workstream Inc.;Canada 1307 | World Gaming plc;United Kingdom 1308 | World Heart Corp.;Canada 1309 | World Ventures Inc.;Canada 1310 | WorldWide Technologies Inc.;Canada 1311 | WPP Group plc;United Kingdom 1312 | Xcelera.com Inc.;Cayman Islands 1313 | Xenova Group plc;United Kingdom 1314 | Yanzhou Coal Mining Co. Ltd.;China 1315 | Yellow Pages Ltd.;Netherlands 1316 | Yorkshire Power Group Ltd.;United Kingdom 1317 | YPF S.A.;Argentina 1318 | Zarlink Semiconductor Inc.;Canada 1319 | Zemex Corp.;Canada 1320 | Zi Corp.;Canada 1321 | -------------------------------------------------------------------------------- /tests/test_cleanname.py: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | import pytest 3 | from cleanco import basename 4 | 5 | 6 | def test_deterministic_terms(monkeypatch): 7 | """prepare_default_terms should always return the same list (even for different ordering in get_unique_terms)""" 8 | from cleanco import clean 9 | with monkeypatch.context() as m: 10 | mock_terms = ["aaa", "bbb", "ccc"] 11 | m.setattr(clean, "get_unique_terms", lambda: mock_terms) 12 | res1 = clean.prepare_default_terms() 13 | m.setattr(clean, "get_unique_terms", lambda: reversed(mock_terms)) 14 | res2 = clean.prepare_default_terms() 15 | assert res1 == res2 16 | 17 | 18 | # Tests that demonstrate stuff is stripped away 19 | 20 | basic_cleanup_tests = { 21 | "name w/ suffix": "Hello World Oy", 22 | "name w/ ', ltd.'": "Hello World, ltd.", 23 | "name w/ ws suffix ws": "Hello World ltd", 24 | "name w/ suffix ws": "Hello World ltd ", 25 | "name w/ suffix dot ws": "Hello World ltd. ", 26 | "name w/ ws suffix dot ws": " Hello World ltd. ", 27 | } 28 | 29 | def test_basic_cleanups(): 30 | expected = "Hello World" 31 | errmsg = "cleanup of %s failed" 32 | for testname, variation in basic_cleanup_tests.items(): 33 | assert basename(variation) == expected, errmsg % testname 34 | 35 | multi_cleanup_tests = { 36 | "name + suffix": "Hello World Oy", 37 | "name + suffix (without punct)": "Hello World sro", 38 | "prefix + name": "Oy Hello World", 39 | "prefix + name + suffix": "Oy Hello World Ab", 40 | "name w/ term in middle": "Hello Oy World", 41 | "name w/ complex term in middle": "Hello pty ltd World", 42 | "name w/ mid + suffix": "Hello Oy World Ab" 43 | } 44 | 45 | def test_multi_type_cleanups(): 46 | expected = "Hello World" 47 | errmsg = "cleanup of %s failed" 48 | for testname, variation in multi_cleanup_tests.items(): 49 | result = basename(variation, prefix=True, suffix=True, middle=True) 50 | assert result == expected, errmsg % testname 51 | 52 | 53 | # Tests that demonstrate basename can be run twice effectively 54 | 55 | double_cleanup_tests = { 56 | "name + two prefix": "Ab Oy Hello World", 57 | "name + two suffix": "Hello World Ab Oy", 58 | "name + two in middle": "Hello Ab Oy World" 59 | } 60 | 61 | def test_double_cleanups(): 62 | expected = "Hello World" 63 | errmsg = "cleanup of %s failed" 64 | for testname, variation in multi_cleanup_tests.items(): 65 | result = basename(variation, prefix=True, suffix=True, middle=True) 66 | final = basename(result, prefix=True, suffix=True, middle=True) 67 | 68 | assert final == expected, errmsg % testname 69 | 70 | # Tests that demonstrate organization name is kept intact 71 | 72 | preserving_cleanup_tests = { 73 | "name with comma": ("Hello, World, ltd.", "Hello, World"), 74 | "name with dot": ("Hello. World, Oy", "Hello. World") 75 | } 76 | 77 | def test_preserving_cleanups(): 78 | errmsg = "preserving cleanup of %s failed" 79 | for testname, (variation, expected) in preserving_cleanup_tests.items(): 80 | assert basename(variation) == expected, errmsg % testname 81 | 82 | # Test umlauts 83 | 84 | 85 | unicode_umlaut_tests = { 86 | "name with umlaut in end": ("Säätämö Oy", "Säätämö"), 87 | "name with umlauts & comma": ("Säätämö, Oy", "Säätämö"), 88 | "name with no ending umlaut": ("Säätämo Oy", "Säätämo"), 89 | "name with beginning umlaut": ("Äätämo Oy", "Äätämo"), 90 | "name with just umlauts": ("Äätämö", "Äätämö"), 91 | "cyrillic name": ("ОАО Новороссийский морской торговый порт", "Новороссийский морской торговый порт") 92 | 93 | } 94 | 95 | def test_with_unicode_umlauted_name(): 96 | errmsg = "preserving cleanup of %s failed" 97 | for testname, (variation, expected) in unicode_umlaut_tests.items(): 98 | assert basename(variation, prefix=True) == expected, errmsg % testname 99 | 100 | 101 | terms_with_accents_tests = { 102 | "term with ł correct spelling": ("Łoś spółka z o.o", "Łoś"), 103 | "term with ł incorrect spelling": ("Łoś spolka z o.o", "Łoś"), 104 | } 105 | 106 | def test_terms_with_accents(): 107 | errmsg = "preserving cleanup of %s failed" 108 | for testname, (variation, expected) in terms_with_accents_tests.items(): 109 | assert basename(variation, suffix=True) == expected, errmsg % testname 110 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py38, py39, py310, py311, py312 3 | 4 | [testenv] 5 | deps=pytest 6 | commands=py.test 7 | --------------------------------------------------------------------------------