Cython nysiis actually added
diff --git a/jellyfish/cyjellyfish.pyx b/jellyfish/cyjellyfish.pyx
new file mode 100644
index 0000000..b7bd9a4
--- /dev/null
+++ b/jellyfish/cyjellyfish.pyx
@@ -0,0 +1,94 @@
+from _jellyfish import (metaphone, match_rating_codex, porter_stem,
+ soundex, hamming_distance, match_rating_comparison,
+ jaro_distance, jaro_winkler, levenshtein_distance,
+ damerau_levenshtein_distance)
+from .compat import _no_bytes_err
+
+
+cpdef nysiis(unicode s):
+ if isinstance(s, bytes):
+ raise TypeError(_no_bytes_err)
+ if not s:
+ return ''
+
+ s = s.upper()
+ key = []
+
+ # step 1 - prefixes
+ if s.startswith('MAC'):
+ s = 'MCC' + s[3:]
+ elif s.startswith('KN'):
+ s = s[1:]
+ elif s.startswith('K'):
+ s = 'C' + s[1:]
+ elif s.startswith(('PH', 'PF')):
+ s = 'FF' + s[2:]
+ elif s.startswith('SCH'):
+ s = 'SSS' + s[3:]
+
+ # step 2 - suffixes
+ if s.endswith(('IE', 'EE')):
+ s = s[:-2] + 'Y'
+ elif s.endswith(('DT', 'RT', 'RD', 'NT', 'ND')):
+ s = s[:-2] + 'D'
+
+ # step 3 - first character of key comes from name
+ key.append(s[0])
+
+ # step 4 - translate remaining chars
+ cdef int i = 1
+ len_s = len(s)
+ while i < len_s:
+ ch = s[i]
+ if ch == 'E' and i+1 < len_s and s[i+1] == u'V':
+ ch = 'AF'
+ i += 1
+ elif ch in 'AEIOU':
+ ch = 'A'
+ elif ch == 'Q':
+ ch = 'G'
+ elif ch == 'Z':
+ ch = 'S'
+ elif ch == 'M':
+ ch = 'N'
+ elif ch == 'K':
+ if i+1 < len_s and s[i+1] == u'N':
+ ch = 'N'
+ else:
+ ch = 'C'
+ elif ch == 'S' and s[i+1:i+3] == 'CH':
+ ch = 'SS'
+ i += 2
+ elif ch == 'P' and i+1 < len_s and s[i+1] == u'H':
+ ch = 'F'
+ i += 1
+ elif ch == 'H' and (s[i-1] not in 'AEIOU' or (i+1 < len_s and s[i+1] not in 'AEIOU')):
+ if s[i-1] in 'AEIOU':
+ ch = 'A'
+ else:
+ ch = s[i-1]
+ elif ch == 'W' and s[i-1] in 'AEIOU':
+ ch = s[i-1]
+
+ if ch[-1] != key[-1][-1]:
+ key.append(ch)
+
+ i += 1
+
+ key = ''.join(key)
+
+ # step 5 - remove trailing S
+ if key.endswith('S') and key != 'S':
+ key = key[:-1]
+
+ # step 6 - replace AY w/ Y
+ if key.endswith('AY'):
+ key = key[:-2] + 'Y'
+
+ # step 7 - remove trailing A
+ if key.endswith('A') and key != 'A':
+ key = key[:-1]
+
+ # step 8 was already done
+
+ return key